import Control.Monad.Reader data Record = MkRecord {foo::[Int], bar::Int} deriving (Show,Read) initRec = MkRecord { foo=[1,2,3,4], bar=0} -- This works getFoo :: Record -> [Int] getFoo rec = asks foo rec getFoo2 :: Record -> [Int] getFoo2 rec = do result <- asks foo rec return result getFooFirst1 rec = head $ getFoo rec getFooFirst2 rec = let result = asks foo rec in head result -- This does not work... why? getFooFirst3 :: Record -> Int getFooFirst3 rec = do result <- asks foo rec return $ head result