我在哈斯克爾初學者,我試圖做到這一點exercise。需要把一個解析器到一個仿函數
所以我需要爲了實現應用型分析器來實現函子分析器。
但是我被困在如何實現Functor,即使使用「第一個函數提示」:(實際上,我無法弄清楚我們試圖通過使用「fmap f Parser a」來實現什麼。 ?
有人能解釋它
我在哈斯克爾初學者,我試圖做到這一點exercise。需要把一個解析器到一個仿函數
所以我需要爲了實現應用型分析器來實現函子分析器。
但是我被困在如何實現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)
。所以讓我們做一個:
fmap f (Parser p) = Parser $ \s -> _
我會讓你嘗試完成這個。
向我們展示你的解析器類型的定義和嘗試的你在定義你自己的情況作出。但是無論哪種方式,或許你應該首先閱讀一些函數......真的,這些並不難,如果你甚至不知道如何處理它們,那麼你將很難實現'適用性實例。 [LYAH](http://learnyouahaskell.com/functors-applicative-functors-and-monoids)總是一個簡單的開始。 – leftaroundabout
我已經讀到仿函數(如在lyahfgg)一些東西,我能理解上容易(?)函數子使用FMAP像列表,IO單子,單子可能。但是在這裏,我必須將函數映射到'String - > Maybe(a,String)'類型的函數上,並且在這種情況下,我不明白需要這樣做(期望需要實現Applicative )。 –
解析器的函子實例用於將一些轉換函數應用於解析器的最終結果,實質上將「Parser a」變爲「Parser b」。 – shang