gpt4 book ai didi

haskell - 输入中的语法错误(意外的 `=')

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

我实际上是 Haskell 的新手。我已经为 Queue 编写了这段代码,但最后一行总是面临这个语法错误。

Syntax error in input (unexpected '='). 


我真的不知道出了什么问题:(
module Queue where
data Queue a = Q[a] deriving Show

class QDS q a where
pop :: q a -> (a, q a)
push :: q a -> a -> q a
lengthQS :: q a -> Int
isEmpty :: q a -> Bool

instance QDS Queue a where
pop (Q (x:xs)) = (x, (Q xs))
push (Q x) a = (Q (x ++ [a]))
lengthQS (Q x) = length x
isEmpty q = lengthQS q == 0 -- This line fails

最佳答案

没有编译器扩展的解决方案:

删除类型参数 a在类和实例中:

class QDS q where
instance QDS Queue where

它在没有语言扩展的情况下编译得很好。

需要 MultiParamTypeClasses

编译器想要的原因 MultiParamTypeClasses很明显:您的 QDS提供两个类型参数。如果不包含实例,MultiParamTypeClass 就足够了。

对灵活实例的需求

如果没有灵活的实例,像 instance QDS Queue Int where 这样的具体声明编译正常。你要问别人更深入的解释,我只能粗浅地说 aInt 更灵活.

为什么一个参数就够了?

你没有对你的有效载荷施加任何限制 a .包含它与 Functor 一样不必要, Foldable等等。

类型类

来自评论的一句话建议:在 OOP 背景下,类型类会给您一种宾至如归的错觉。您很少需要定义一个类。传递函数的能力比使用对象(或被限制为 haskell 的类型类的数据)更强大。

关于haskell - 输入中的语法错误(意外的 `='),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29839095/

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