2017-10-30 20 views
3

Hedgehog은 다음과 같이 정의 된 HTraversable 클래스가 : 값이 콘크리트 또는 추상 여부를 통해 유형을 매개 변수화에 대한 자신의 Var 유형에 사용되는상위 traversable functors에 해당하는 optic이 있습니까?

-- | Higher-order traversable functors. 
-- 
class HTraversable t where 
    htraverse :: Applicative f => (forall a. g a -> f (h a)) -> t g -> f (t h) 

. t(* -> *) -> * 종류이며 실제로는 해당 클래스가 없어도 상위 차수의 펑터입니다. f, gh은 종류가 * -> *입니다. 몇 가지 다른 라이브러리에서 정의 된 것과 동일한 것을 보았습니다.

광섬유를 얻을 수있는 방법이 있습니까? 나는 그게 뭘 할 지 모르겠다 고 고백하며, 나는 렌즈 나 보통 Traversable 중 어느 쪽이라도 편안하지 않다.

답변

1

확실히.

type HTraversal s t a b = 
    forall f. Applicative f => (forall x. a x -> f (b x)) -> s -> f t 

htraverse :: HTraversable t => HTraversal (t a) (t b) a b 

lensTraversal하지 다형성 컨테이너로하지만, 모 놀리 식 덩어리로에 이동을보고, traverse의 종류를 복용하고 t at b 종류는 다양시키는 약 온다 기억하십시오.

유용한 정보 HTraversal은 무엇입니까? (.)으로 멋지게 작성할 수 없습니다.

+0

음, 흥미 롭습니다. 그래서 거기에는 상응하는 것이 있습니다. 그러나 그것은 다른 광학계와 정말로 맞지 않습니다. 나는 이것이 작동하는 "higher order optics"세트가 있는지 궁금합니다. –

+0

'HTraversable'는 Functor 카테고리에 속한 Functor 카테고리에서 Hask에 이르기까지의 객체를위한 것입니다. 'Traversable'이'itraverse :: Applicative f => (forall x. ax -> f (bx)) ->와 같이 보이도록 Funner 카테고리 (예 : 모나드 변압기)에서 _endofunctors_ 카테고리로 작업 할 수 있습니다. forall x.sx-> f (tx))'와 같이 표현할 수있다. 이 유형의 순회는'. (.) '로 구성되며, 프리즘 등도 만들 수 있습니다. 하지만 'HTraversable'과 'ITraversable'은 '렌즈'와 상호 운용되지 않습니다. 왜냐하면 그들은 서로 다른 범주에 있기 때문입니다. –