Thanks Rahul ,

I am currently only using simple patterns   trying to replicate the behavior of standard functions that I have learned so far in order to familiarize myself with the recursive way of doing things .

Currently I am just using the GHCI directive (:set +s) to compare runtimes etc and computing algorithmic complexity like how I normally do it in imperative languages (not sure if they hold up in lazy settings), 

Can you point me to resources where I can learn how  the 
a)GHC actually works .
b)optimize or analyze the code I write in haskell .


Thanks in advance :)