在Brent Yorgey的2013年UPenn 课程作业中,newtype存在以下内容:
newtype Parser a = Parser { runParser :: String -> Maybe (a, String) }
我正试图实现Parser一个Functor.
给出以下first功能来帮助解决此问题:
first :: (a -> b) -> (a, c) -> (b, c)
first f (a, c) = (f a, c)
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
instance Functor (Parser) where
fmap g (Parser f) = Parser $ fmap (first g) (f . g)
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.
据我所知,f的类型是String -> Maybe (a, String).所以,我不知道怎么apply一String来f …
haskell ×1