gpt4 book ai didi

haskell - 如何限制功能?

转载 作者:行者123 更新时间:2023-12-04 22:03:40 25 4
gpt4 key购买 nike

鉴于:

class Contravariant (f :: * -> *) where
contramap :: (a -> b) -> f b -> f a

以下代码被拒绝。我希望通过 String -> BoolInt -> Bool 进行反向映射,从而获得 String -> Int (谓词)。我觉得自己很愚蠢,因为我必须做出一些错误的假设。请帮助我理解错误消息。为什么第二个参数预期与我认为我需要的参数不同?
Prelude Control.Lens> contramap length (>0) "Hello"

<interactive>:25:19: error:
• Couldn't match type ‘Bool’ with ‘Int’
Expected type: [Char] -> Int
Actual type: [Char] -> Bool
• In the second argument of ‘contramap’, namely ‘(> 0)’
In the expression: contramap length (> 0) "Hello"
In an equation for ‘it’: it = contramap length (> 0) "Hello"

最佳答案

逆变仅适用于类型构造函数的最后一个参数。您可能需要 Profunctor ,它表示在倒数第二个参数中是逆变的类型构造函数,在最后一个参数中是协变的(如常规仿函数)。

<Gurkenglas> > lmap length (>0) "hello"
<lambdabot> True

关于haskell - 如何限制功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923880/

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