-length :: [a] -> Int
-length l = lenAcc 0# l
-
-{-# RULES
-"length" [~1] forall xs. length xs = foldr incL (I# 0#) xs
-"lenAcc" [1] forall n#. foldr incL (I# n#) = lenAcc n#
- #-}
-
-incL :: a -> Int -> Int -- Internal
-{-# NOINLINE [0] incL #-}
-incL x n = n `plusInt` oneInt
-
-lenAcc :: Int# -> [a] -> Int -- Internal
-lenAcc a# [] = I# a#
-lenAcc a# (_:xs) = lenAcc (a# +# 1#) xs