(<*>) :: Applicative f => f (a -> b) -> f a -> f b
Const :: a -> Const a b
Monoid m => Applicative (Const * m)
Const "a" <*> Const "b" -- yields Const "ab"
Const a <*> Const a = Const a <> Const a
この動作は、Const
がバイナリタイプのコンストラクタであるという事実と関係があります。b
には決して触れません(ファントムタイプ)。しかし、この場合、a
(それぞれ*
)が破棄されたように見えるので、私はConst * m
を理解しません。Constインスタンスの<*>が2つの非機能的な値を受け入れるのはなぜですか?
はどのようにして 'モノイドメートル=>のApplicative(定数*メートル)'出力を生成しなかった行を取得しますか? – Krom
は[Hackage](http://hackage.haskell.org/package/base-4.9.1.0/docs/Control-Applicative.html#v:Const)からコピーしました – ftor