Look mom.. My first Haskell code
These days I am trying my hardest to learn Haskell.
Found these 2 great online resources Real World Haskell and Learn You a Haskell.
An attempt to solve a rather simple problem from codechef took me close to 2 days.
Not due to the lack of looping constructs..
Nor because I cannot think recursively.
But primarily due to the fact that Haskell doesn’t make it easy to mix pure and impure code.
It took me quite a while to understand that a little monadic constructs such as mapM, forM exists. And the let bindings for sprinkling pure code in between impure code.
But it was worth it though.
Here I present my first ever Haskell program in all its elegance. :))
import Control.Monad
factorial :: Integer -> Integer
factorial x = product [1..x]
main = do
n <- readLn
— Read n numbers and store them in a list
inputList <- forM [1..n] (\a -> readLn)
let outputList = map factorial inputList
mapM_ print outputList
O’course, forM could well be substituted for mapM but with the parameters flipped.
But I find the forM version more readable.
import Control.Monad
factorial :: Integer -> Integer
factorial x = product [1..x]
main = do
n <- readLn
— Read n numbers and store them in a list
inputList <- mapM (\a -> readLn) [1..n]
let outputList = map factorial inputList
mapM_ print outputList
Leave a Reply