gpt4 book ai didi

haskell - 无法理解 Haskell 的类型系统

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

我目前正在尝试做20 Intermediate Haskell Exercises .我能够完成前 3 个练习(但这是因为 furry == fmapLearn You a Haskell 已经有了这些实现)。我目前被困在说:

instance Fluffy (EitherLeft t) where                                        
furry = error "todo"

我真的不明白该怎么做。在 Learn You Haskell 中,他们有一个 newtype名为 Pair 的变量它接受一个元组。然后他们可以像这样进行模式匹配:
  fmap f (Pair (x,y)) = Pair (f x, y)

我在想也许你可以在我的情况下做类似的事情:
  furry f (EitherLeft (Either a b)) = EitherLeft (Either (f a) b)

但是,这不起作用:
Not in scope: data constructor `Either'

我在想也许我会 import Data.Either因为他可能有一些我没有的进口东西。但这没关系。

我也试图让这个工作:
  furry f (EitherLeft a b) = error "todo"

但这也不起作用:
Constructor `EitherLeft' should have 1 argument, but has been given 2

我也无法让它工作:
  furry f (Right x) = (Right f x)
furry f (Left x) = Left x

这给出了错误:
Couldn't match expected type `EitherLeft t a'
with actual type `Either t0 t1'

我只能得到:
  furry f (EitherLeft t) = error "todo"

去工作。但我不知道如何处理 t .

我不一定想要答案。我只需要一个关于该做什么的提示,因为我正在阅读并且我可以理解这些示例,但我无法真正开始自己编写这些东西。

谢谢丹,这就是我想出的解决方案:
instance Fluffy (EitherLeft t) where                     
furry f (EitherLeft (Left x)) = EitherLeft $ Left (f x)
furry f (EitherLeft (Right x)) = EitherLeft $ Right x

最佳答案

您遇到的问题是 Either 数据类型没有名为 Either 的数据构造函数,基本上 Either 类型看起来像这样

data Either a b = Left a
| Right b

所以一个值的类型可以是 Either a b ,但没有像 Either "one" 1 这样的值或类似的东西,而是 Left "one" , 或 Right 1 .

所以在 EitherLeft 的情况下, 同样它的值看起来像 EitherLeft (Left a)EitherLeft (Right b) , 并且需要与之进行模式匹配。

关于haskell - 无法理解 Haskell 的类型系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12047481/

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