3 ms·
Join (flatten) is a fundamental monadic operation. join:: m (m a) -> m a I have a parser of a single character and a way to generate new character parsers
by Tyr42 11y ago
Join (flatten) is a fundamental monadic operation.
join:: m (m a) -> m a
I have a parser of a single character and a way to generate new character parsers
char :: Char -> Parser Char
x :: (Parser Char)
let y = fmap (char . toUpper) x :: (Parser (Parser Char))
It's a parser which creates a new parser out of the input it consumes.
I do think that fmap/pure/join is the easier to understand set of defining functions for monads.
- quchen 11y agojoin is one possible fundamental monadic operation. You can also define monads in other ways, such as endofunctors such that the Kleisli structure forms a category. In this case, you have the identity arrow (called return in Haskell) and Kleisli composition (<=< in Haskell) as fundamental operations. Neither of these is more fundamental than the other. You can convert back and forth, f >=> g = \x -> f x >>= g m >>= f = (f <=< id) m join = (>>= id) m >>= f = join (fmap f m) So if you're focused on composing monadic operations, thinking about it in terms of >=> is often a good idea.