16

Haskell では、インスタンスの型シグネチャで ((->) t) はどういう意味ですか? たとえば、Functor、Applicative、および Monad はすべて、次のようなインスタンスを持ちます。

Functor ((->) r)

この型シグネチャが何を意味するのかについての説明は見つかりません。また、検索エンジンに対する耐性が非常に高いです。

4

3 に答える 3

19

->中置型コンストラクタです。:リスト型の中置値コンストラクターと比較できます。単独で使用する:には、括弧で囲み、接頭辞関数のアプリケーションになります。

(:) a bと同じですa : b

同様に、は からまでの関数の型(->) a bと同じです。a -> bab

(->) a型コンストラクターの部分適用であり、それ自体が kind の型コンストラクターです* -> *

「a からの関数の型のコンストラクター」と考えることができます。たとえば(->) Int、 からの関数の型のコンストラクタですInt。別の型を渡すことで完全な関数型を構築できます:は からまで(->) Int Stringの関数の型です。IntString

instance Functor (->) a関数を関数にfmap変換する操作を持つファンクターです。引数を値に適用することで、これを類似のwhich にマップするものと比較できます。a -> ba -> cinstance Functor (Either a)Either a bEither a cfmapRight

于 2013-09-01T19:30:08.320 に答える
12

ラムダ関数と中置関数を使用できます。

(->) a    =    \b ->  (->) a b  --pseudo-Haskell
(->) a    =    \b ->  a -> b    --pseudo-Haskell

したがって、インスタンスを次のように読み取ります。

class Functor f where
   fmap :: (a->b) -> f a -> f b

instance Functor ((->)r) where
   fmap :: (a->b) -> f     a  -> f     b
         = (a->b) -> (->)r a  -> (->)r b   --pseudo-Haskell
         = (a->b) -> (r -> a) -> (r -> b)  --pseudo-Haskell
于 2013-09-01T20:16:14.230 に答える
4

r -> ar固定されているタイプのセットとして見ることができます。

ファンクターは型関数ですm。これは、どの型に対しても型があることを意味しaますm a。例はMaybe[]および(->) rです。後者は と書いたほうがいいかもしれ(r ->)ませんが、それが許されるかどうかはわかりません。

于 2013-09-01T19:31:43.333 に答える