fork download
  1. {-# LANGUAGE MagicHash #-}
  2. {-# LANGUAGE UnboxedTuples #-}
  3. {-# LANGUAGE NoImplicitPrelude #-}
  4. module Main (main) where
  5.  
  6. import Prelude hiding (length)
  7. import GHC.Exts
  8.  
  9. length :: [a] -> Int
  10. length xs = case newMutVar# 0 realWorld# of
  11. (# s, var #) -> worker# var s xs
  12. where
  13. worker# v s xs = case readMutVar# v s of
  14. (# s', l@(I# l#) #) -> case xs of
  15. [] -> l
  16. (_:xs) -> worker# v (writeMutVar# v (I# (l# +# 1#)) s') xs
  17.  
  18. main :: IO ()
  19. main = print (length [1, 2, 3, 4, 5, 6])
Success #stdin #stdout 0s 5676KB
stdin
Standard input is empty
stdout
6