Haskell Application Clarification
I am having trouble understanding the following applicative instance. Can someone explain to me what the Applicator does (in this case) and how can it be used? Or write it less confusing? Thank!
newtype Parser a = P { getParser :: String -> Maybe (a, String) }
instance Applicative Parser where
pure = success
P p <*> P p' = P $ \s -> case p s of
Just (f, s') -> fmap (applyToFirst f) $ p' s'
Nothing -> Nothing
{-|
Applies a function to the first component of a pair.
-}
applyToFirst :: (a -> b) -> (a, c) -> (b, c)
applyToFirst f (x, y) = (f x, y)
+3
source to share
2 answers
Combining the two parsers with <*>
gives you a new parser. Given the input string, the new parser runs the first parser that returns a result and the unopened remainder of the string. The rest of the string is assigned to the second parser, returning the result and the unopened remainder. Then the two results are combined. If any parser fails, the result is a failure.
+1
source to share