小编Ziy*_*Liu的帖子

为什么将Data.List.genericLength实现为正确的折叠?

genericLength 从基础4.12开始,实现为:

genericLength           :: (Num i) => [a] -> i
{-# NOINLINE [1] genericLength #-}
genericLength []        =  0
genericLength (_:l)     =  1 + genericLength l

{-# RULES
  "genericLengthInt"     genericLength = (strictGenericLength :: [a] -> Int);
  "genericLengthInteger" genericLength = (strictGenericLength :: [a] -> Integer);
 #-}

strictGenericLength     :: (Num i) => [b] -> i
strictGenericLength l   =  gl l 0
                        where
                           gl [] a     = a
                           gl (_:xs) a = let a' = a + 1 in a' `seq` gl xs …
Run Code Online (Sandbox Code Playgroud)

haskell

14
推荐指数
1
解决办法
123
查看次数

标签 统计

haskell ×1