繁体   English   中英

实际上是Haskell中的通用长度函数

[英]Actually generic length function in Haskell

length在输入上是通用的,因为它接受任何Foldable

genericLength在输出上是通用的,因为它输出任何Integral

是否存在具有类型的实际完全通用函数:

(Integral b, Foldable t) => t a -> b

甚至:

(Num b, Foldable t) => t a -> b

尽管长度应该只产生整数值,但整数也是浮点数,因此产生任何数字都可以正常工作。

目前我只是使用:

foldl' (const (+ 1)) 0

我知道可以很容易地制作一个,但我也知道基本函数经常以某种方式进行优化,所以我希望有一个通用的计算length函数。 如果不是我的后续问题是为什么? 具体为什么genericLength不接受Foldable

我的意思是评论中已经回答了这个问题。 但只是因为这个问题被标记为已回答,原因基本上是genericLength由于它支持惰性自然数而具有可怕的性能,因此应该几乎可以避免。 通过重写规则可以部分避免这种性能问题,但即便如此,它仍然不是一个好的功能,因此尝试进一步概括它是不值得的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM