import Control.Monad.Reader
-- comp1 :: Reader Int Int
-- comp1 = do 
--     r <- ask
--     return $ r * 4
comp1 :: Reader Int Int
comp1 = do 
    r <- ask
    r2 <- comp2
    comp3 $ r2 * 3
comp2 :: Reader Int Int   
comp2 = do 
    r <- ask
    return $ 10 * r
    
comp3 :: Int -> Reader Int Int
comp3 v = do
    r <- ask
    return $ r * v
main = print $ runReader comp1 5
-- livescript: http://test.pipend.com/branches/pFVR4Tb/