Haskell Parser类型Functor实现中'. rp'语法的疑问求解
Haskell Parser Functor实现中对函数组合操作的理解疑问
我正在学习Haskell Applicative Functor相关教程,对应作业为 CIS194: Homework10 - applicative。
教程中给出如下Parser类型定义:
-- A parser for a value of type a is a function which takes a String -- representing the input to be parsed, and succeeds or fails; if it -- succeeds, it returns the parsed value along with the remainder of -- the input. newtype Parser a = Parser { runParser :: String -> Maybe (a, String) }
作业要求为Parser实现Applicative实例,在实现Applicative前需先实现Functor。我自行编写的Parser Functor实例如下:
instance Functor Parser where fmap f p = Parser ( -- take a function and a parser \s0 -> case runParser p s0 of -- parse a string Nothing -> Nothing -- if parse fails, returns nothing Just (a,s1) -> Just (f a,s1) -- if parse succeed, returns --1. function applied to parsed result --2. remaining string )
我找到另一种该Functor的参考实现,代码如下:
first :: (a -> b) -> (a, c) -> (b, c) first f (a, c) = (f a, c) instance Functor Parser where fmap f (Parser rp) = Parser (fmap (first f) . rp)
我无法理解实现中 . rp 部分的逻辑,希望得到解答。我的现有理解如下:
Parser rp模式匹配中的rp可以是任意类型(如整数、元组、函数等),我们不应预设其具体类型;.是函数组合操作符,仅适用于函数类型;- 因此不能将
.与rp搭配使用,因为无法确定rp一定是函数。
请问我在理解过程中遗漏或误解了什么?
内容的提问来源于stack exchange,提问作者ymir
相关产品推荐
相关产品推荐

