以下のようなデータ型がBlah
ですが、のタイプのため、Functor、Applicative、Monadを自動的に派生できないため、です。だから私は手動で行う必要がありますが、私はどのようにわからない。私は((->) a)
のインスタンスからインスピレーションを得ようとしましたが、私はMonadのインスタンスを理解できません。関数型のApplicativeとMonadのインスタンス?
newtype Blah a = Blah (String -> a) -- deriving (Functor, Applicative, Monad)
-- this seems right
instance Functor Blah where
fmap f (Blah g) = Blah (f . g)
instance Applicative Blah where
pure = Blah . const
-- This is right, right?
(<*>) (Blah f) (Blah g) = Blah $ \x -> f x (g x)
instance Monad Blah where
return = pure
-- I'm not having any luck here.
(>>=) a b = Blah $ \c -> _
編集:誰かがこれを別のものと重複してマークしましたが、私はその回答をどこから得るのか分かりません。 newtypeラッパーは、これを困難にしました。私は(->) a
の前にMonad
のインスタンスを調べましたが、私はこの質問を書いていましたが、答えの体操は私が必要なものです。
なぜこれがマークダウンされていますか?それは完全に良い質問のようです。 –
[Monadのインスタンスの使い方( - >)と混乱について( - >)]の可能な複製(http://stackoverflow.com/questions/5310203/how-to-use-instances-of-monad-and-混乱について) – Cactus