状態モナドは積(左-ファンクター)とリーダー(右-表現可能)に因数分解できます。 継続モナドを因数分解する方法はありますか?以下のコードは、チェックを入力しない私の試みです -- To form a -> (a -> k) -> k {-# LANGUAGE MultiParamTypeClasses, TypeOperators, InstanceSigs, TypeSynonymInstances #-} type (<-:) o i = i -> o -- I Dont think we can have Functor & Representable for this type synonym class Isomorphism a b where from :: a -> …
Applicative型クラスは、型指定された機能のカテゴリにデカルトmonoidal構造を保持ずさんmonoidalファンクタを表します。 言い換えると(,)、モノイド構造を形成する正準同型が見られる場合: -- Implementations left to the motivated reader assoc_fwd :: ((a, b), c) -> (a, (b, c)) assoc_bwd :: (a, (b, c)) -> ((a, b), c) lunit_fwd :: ((), a) -> a lunit_bwd :: a -> ((), a) runit_fwd :: (a, ()) -> a runit_bwd :: a -> (a, …
型シグネチャによる自然変換はa -> a恒等関数でなければならないことが知られています。これは米田補題に続くが、直接導出することもできる。この質問は同じ性質を求めますが、自然な変換ではなくモナド射を求めます。 モナドM ~> N間のモナド射を考えます。(これらはM a -> N a、両側でモナド演算を保持する自然な変換です。これらの変換は、モナドのカテゴリーの射です。)e :: (Monad m) => m a -> m aすべてのモナドで同じように機能するモナド射が存在するかどうかを確認できますm。言い換えると、モナドモーフィズムeは、モナドタイプパラメータでモナド的に自然でなければなりませんm。 モナド自然法則によれば、任意の2つのモナドMとNの間のモナドモーフィズムf:M a-> N aについてはf . e = e . f、適切な型パラメーターが必要 です。 問題は、そのようなeものは恒等関数でなければならないことを証明できるか、またはe次のように定義された非恒等モナド射の反例があるかどうかです。 e :: (Monad m) => m a -> m a e ma = ... そのような定義に失敗した試みの1つeは次のとおりです。 e ma = do …
セットのカテゴリーは、デカルトのモノイドとコカルテシアのモノイドの両方です。これらの2つのモノイド構造を示す正準同型のタイプを以下に示します。 type x + y = Either x y type x × y = (x, y) data Iso a b = Iso { fwd :: a -> b, bwd :: b -> a } eassoc :: Iso ((x + y) + z) (x + (y + z)) elunit :: Iso …
これが私が参照するSOの投稿です。また、資料を分離しないために、その質問ではOPと同じスニペットを使用します。 インスタンスがモナドを生成すること、およびその逆が広く知られていArrowApplyます。 newtype ArrowMonad a b = ArrowMonad (a () b) instance Arrow a => Functor (ArrowMonad a) where fmap f (ArrowMonad m) = ArrowMonad $ m >>> arr f instance Arrow a => Applicative (ArrowMonad a) where pure x = ArrowMonad (arr (const x)) ArrowMonad f <*> ArrowMonad x …