Понимание сложной сигнатуры типа

Мне нужна помощь в понимании сигнатуры этого типа, взятой из пакета Thrist.

import Prelude hiding ((.), id)
import Control.Category
import Data.Monoid
import Control.Arrow
import Control.Monad

foldlThirst :: (forall j k . (a +> j) -> (j ~> k) -> (a +> k))  
               -> (a +> b) 
               -> Thrist (~>) b c  
               -> (a +> c)

Я запутался в нескольких вещах.

Во-первых, что это за символы +> и ~>? Где они задокументированы и как называются?

Но мое замешательство на этом заканчивается. Я понимаю, что количественная оценка описывает распределение типов Thrist, но я не уверен, описывает ли это связь, которая выполняется для первого аргумента, или для всей функции, или кто знает ...

В других случаях, когда я видели количественную оценку существования, фраза заканчивается точкой, но здесь она заканчивается ->, это важно?

8
задан Don Stewart 13 May 2011 в 17:56
поделиться