私はハスケルの初心者で、これをやろうとしていますexercise。パーサをFunctorに変える必要がある
私は、Applicative Parserを実装するためにFunctor Parserを実装する必要があります。
しかし、 "最初の関数ヒント"を使っても、Functorを実装する方法には固執しています:(実際は、 "fmap f Parser a"を使って達成しようとしていることを理解できません。 ?
誰かがそれを説明することができ
私はハスケルの初心者で、これをやろうとしていますexercise。パーサをFunctorに変える必要がある
私は、Applicative Parserを実装するためにFunctor Parserを実装する必要があります。
しかし、 "最初の関数ヒント"を使っても、Functorを実装する方法には固執しています:(実際は、 "fmap f Parser a"を使って達成しようとしていることを理解できません。 ?
誰かがそれを説明することができ
を私たちはいつものよう
fmap :: (a -> b) -> Parser a -> Parser b
を定義する必要があり、我々は、パターンマッチングにより開始:
fmap f (Parser p) = _
結果は、パーサーも、それでは、コンストラクタを適用させなければならない:
fmap f (Parser p) = Parser _
は、今、私たちはString -> Maybe (b, String)
、穴内の関数を必要としています。だから1つを作ろう:
fmap f (Parser p) = Parser $ \s -> _
これをやりなおしてみましょう。
私は 'String - > Maybe(b、String)'を意味すると思います。 – amalloy
私の実装です。しかし、私はファンクタから何を期待するのか分からないので、私はOKではない: 'インスタンス・ファンクタ・パーサwhere fmap g(Parser f)= Parser f 'where f = case fs 何もない - > Nothing Just(x、ss) - > Just(gx、ss) –
@MaximeB。はい、そうです。 Hackageのクラスのドキュメンテーションを読むことで、 'Functor'から何を期待するかを知ることができます。 – dfeuer
あなたのパーサータイプの定義と、インスタンスを自分で定義しようとする試みを私たちに教えてください。しかしどちらにしても、最初にファンクタで少し読んでみてください...本当に、これはあまり難しくありません。もしあなたがそれらと何をするべきかを理解できなければ、あなたは '適用例。 [LYAH](http://learnyouahaskell.com/functors-applicative-functors-and-monoids)はいつでも簡単に始めることができます。 – leftaroundabout
私はすでにfunahについてのいくつかのことを読んでいます(lyahfggのように)、IO Monad、Maybe Monadのような簡単な(?)ファンクタのfmapの使い方を理解できます。しかし、ここでは、 'String - > Maybe(a、String)'型の関数に関数をマップする必要があります。その場合、これを行う必要性を理解できません(Applicative )。 –
パーサーのファンクターインスタンスは、パーサの最終結果に変換関数を適用するために使用され、基本的に 'パーサa 'を'パーサb'に変更します。 – shang