gpt4 book ai didi

haskell - 如何在 Haskell 中使用 (.)

转载 作者:行者123 更新时间:2023-12-02 05:49:35 25 4
gpt4 key购买 nike

我正在尝试用 Haskell 写这样的东西:

length . nub . intersect

但它不起作用。

*Main Data.List> :t intersect
intersect :: Eq a => [a] -> [a] -> [a]
*Main Data.List> :t nub
nub :: Eq a => [a] -> [a]
*Main Data.List> :t length
length :: [a] -> Int

根据类型,我的理解是 intersect 返回一个类型 [a] 并捐赠给 nub ,这正好需要一个[a] 的类型,然后也返回 [a] 的类型到 length ,最后返回应该是一个 Int 。有什么问题吗?

最佳答案

这里的问题是 intersect 接受 2 个参数(某种意义上)

您可以明确提供其中一个参数:

> let f a = length . nub . intersect a
> :t f
f :: Eq a => [a] -> [a] -> Int

或者您可以使用像 (.:) = (.) 这样有趣的小运算符。 (.):

> let (.:) = (.) . (.)
> :t length .: (nub .: intersect)
length .: (nub .: intersect) :: Eq a => [a] -> [a] -> Int

这是一个不需要括号的版本:

导入数据.List

infixr 9 .:

(.:) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
(.:) = (.).(.)

f :: Eq a => [a] -> [a] -> Int
f = length .: nub .: intersect

关于haskell - 如何在 Haskell 中使用 (.),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25738171/

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