gpt4 book ai didi

haskell - 为什么这是一个无效的 eta 转换?

转载 作者:行者123 更新时间:2023-12-02 05:36:20 26 4
gpt4 key购买 nike

我正在用 haskell 解决一个非常基本的问题。我试图计算字符串中小写字母的数量。我的解决方案是这样的

import Data.Char

lowercaseCount :: String -> Int
lowercaseCount x = length $ filter isLower x

我正在查看 lowercaseCount 的实际实现,发现它似乎应该能够减少 eta。我试过了

lowercaseCount = length $ filter isLower

但是 GHC 对我大吼说

Couldn't match expected type [Char] -> Int with actual type Int

我想知道为什么这种 eta 缩减是非法的,以及是否有办法使这个函数能够采用 eta 缩减形式。

最佳答案

lowercaseCount x = length $ filter isLower x

表示

lowercaseCount x = length (filter isLower x)    -- (1)

同时

lowercaseCount = length $ filter isLower

表示

lowercaseCount = length (filter isLower)

经过eta扩展变成

lowercaseCount x = length (filter isLower) x  -- (2)

现在应该很明显,(1) 和 (2) 是不等价的。后者将两个参数传递给 length,触发类型错误。

关于haskell - 为什么这是一个无效的 eta 转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41385477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com