Arrows
Let's find our way towards arrows from the perspective of monads. Consider the following IO code:
import System.IO main = do main = liftM (length . words) (readFile "jabberwocky.txt" ) >>= print -- regular functions: length, words -- Monadic functions: readFile, print
We use liftM
to lift the composed function length . words
into the monadic function readFile
and then feed the result to another monadic function, print
.
We can compose the regular functions with (.)
, but we know well that we cannot do the following:
print . length . words . readFile "jabberwocky.txt" -- INVALID - types don't align
Let's make the preceding code possible!
Note
The following code is based on a combination of Programming with Arrows by John Hughes, and a blog post ...
Get Haskell Design Patterns now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.