instance Functor (State s) where
fmap f (State g) = State $ \s0 ->
let (a, s1) = g s0
in (f a, s1)
State
の実装はFunctor
です。私はそれがどのように機能するのか理解できません。特に、g
は関数として使用されますが、私の目では関数ではありません。それは単なる目的(たぶん関数)ですが、なぜそれが機能しているのか理解できません。結局のところ、何らかの状態でなければならないので、例えばInt
ファンクターインスタンスの状態
を明記してください。
通常、あなたは '' State sa = State(s - >(s、a)) 'を持っています。' 'g''は' s - >(s、a) '型の関数です(すなわち、結果(この場合は 'a')と新しい状態(' s1'))を返します。この 'Functor'インスタンスは、単に値を返す前に計算の結果に' f'を適用します。 – Bakuriu
名前の状態は本当に混乱しており、状態はモナド自体です。モナドとは、状態にアクセスしたり、状態を変更したりするものです。 – mb14