В рамках домашнего задания мы работаем над анализатором в Haskell. У нас есть этот тип данных
newtype Parser a = Parser { parse :: String -> Maybe (a,String) }
Это ясно для меня, наш анализатор получает строку, возвращаемое выражение из типа a и оставшуюся непарсированную строку.
Но затем у нас есть определение функтора:
instance Functor Parser where
fmap f p = Parser $ \s -> (\(a,c) -> (f a, c)) <$> parse p s
И я полностью потерян. Мне кажется, что parse ps дает проанализированное выражение типа a, но я не могу понять, что на самом деле делает этот fmap и почему это имеет смысл.
Надеюсь, что кто-то может дать мне подсказка.
Спасибо!