gpt4 book ai didi

haskell - 为什么函数组合需要括号?

转载 作者:行者123 更新时间:2023-12-02 13:34:29 25 4
gpt4 key购买 nike

假设我想用 Text.strip 组合 Text.pack

:t (.) 生成:(b -> c) -> (a -> b) -> a -> c

:t (Text.pack) 生成:String -> Text

:t (Text.strip) 生成:Text -> Text

因此,将 strip 替换为 (b -> c) 得出:b = 文本c = 文本

pack 替换为 (a -> b) 得出:a = 字符串b = 文本

让我们验证一下: :t strip 。 pack 产生:剥离 .包::字符串 -> 文本

好的,太棒了,让我们尝试一下:

strip.pack“示例”

产品:

Couldn't match expected type ‘a -> Text’ with actual type ‘Text’
Relevant bindings include
it :: a -> Text (bound at <interactive>:31:1)
Possible cause: ‘pack’ is applied to too many arguments
In the second argument of ‘(.)’, namely ‘pack " example "’
In the expression: strip . pack " example "

(strip . pack) "example " 按预期工作......为什么?

最佳答案

函数应用的优先级高于组合。

strip.pack "example " 相当于 strip.(pack "example ")。这就是人们使用 $ 来“抑制”应用程序直到所有函数都组合完成的原因之一:

strip . pack $ "    example     "

关于haskell - 为什么函数组合需要括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38905737/

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