2017-10-30 10 views
3

Hedgehogは、次のように定義されたHTraversableクラスがあります。値はコンクリートや抽象的であるかどうかを超えるタイプをパラメータ化するために彼らのVarタイプで使用されて高次のトラバーサルファンクタに対応する光学系はありますか?

-- | 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,gおよびhは種類が* -> *です。私はいくつかの異なるライブラリで定義された同じことを見てきました。

これで光景を得る方法はありますか?私はそれが何をするのかわからないと告白し、レンズや普通の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 

lensTraversaltraverseの種類を取り、t at bタイプではない多型コンテナとしてではなく、モノリシックブロブとして一筆書きを見て、様々せることで約来ることを覚えておいてください。

どのように便利ですHTraversalは、私は駄目です。 (.)でうまく構成できません。

+0

うん、面白いです。それに対応するものがありますが、他の光学系と実際には適合しません。私はこれが働く "高次の光学"のセットがあるのだろうかと思います。 –

+0

'HTraversable'は、ファンクションカテゴリからHaskへのファンクションのカテゴリにあるオブジェクト用です。あなたは 'traversable'が' itraverse :: Applicative f =>(forall x ax - > f(bx)) - >(のようになります)のfunctorカテゴリ(モナド変換子など)で_endofunctors_のカテゴリで作業することができますforall x .sx - > f(tx)) 'である。このタイプのトラバーサルは '(。)'で構成され、プリズムなども構築できます。しかし、「HTraversable」と「ITraversable」は、別々のカテゴリに構築されているため、「レンズ」と相互運用することはできません。 –

関連する問題