Haskell 错误:在输入“:';在哈斯克尔?
我是Haskell和Iam的新手,我正在尝试使用Haskell 错误:在输入“:';在哈斯克尔?,haskell,functional-programming,Haskell,Functional Programming,我是Haskell和Iam的新手,我正在尝试使用列表使用名为union的函数实现SetADT。下面是代码: import Data.List data Set a = Set [a] union' :: Set a -> Set a -> Set a union' xs [] = xs union' [] ys = ys union' x:xs ys = | not $ x:xs `elem` ys = x:union' xs ys | otherw
列表使用名为union
的函数实现Set
ADT。下面是代码:
import Data.List
data Set a = Set [a]
union' :: Set a -> Set a -> Set a
union' xs [] = xs
union' [] ys = ys
union' x:xs ys = | not $ x:xs `elem` ys = x:union' xs ys
| otherwise union xs ys
我认为我在类型分配方面犯了严重的错误。编译时,它显示一个错误,如下所示
error: parse error on input `::'
union' :: Set a -> Set a -> Set a
请原谅我犯了这些愚蠢的错误,但如果您能提供任何帮助,我们将不胜感激,谢谢您没有原始代码进行检查,我只能留下一个版本供您比较,并希望您能在“:”上找到导致解析错误的内容
import Data.List
data Set a = Set [a]
union' :: Eq a => Set a -> Set a -> Set a
union' (Set xs) (Set []) = Set xs
union' (Set []) (Set ys) = Set ys
union' (Set (x:xs)) (Set ys)
| not $ x `elem` ys = cons (Set [x]) (union' (Set xs) (Set ys))
| otherwise = union' (Set xs) (Set ys)
cons (Set xs) (Set ys) = Set (xs ++ ys)
instance Show a => Show (Set a) where
show (Set xs) = show xs
以下是我开始修改源代码时遇到的情况:
您不需要将“=”放在guard“|”之前
防护装置“|”需要相等的空间缩进
第二个保护表达式缺少“=”
称为联合而不是联合的
对于每个模式匹配,都需要数据类型构造函数“Set”。
(或者是一个用于解包集合构造函数的包装器函数和一个传递两个列表的帮助器函数。这样,您可能不需要设置自己的缺点。我只是想到了这一点。)
集合而不是(:)的Cons
以及Set的show实例,以显示union'的结果
只要相信你的编译器,最终一切都会好起来的!祝你好运 完整的错误消息是什么?您的类型声明是针对一个名为union'
(union prime)的函数的,但您的函数名为union
——它可能没有关联,但您可能还是要清理它。是一件事,顺便说一句。这个错误听起来像是这样的。输入“::”上的分析错误。我试过你的密码。我得到的错误在“=|”“|”部分。所以也许你的错误是关于空间缩进。因此,确保所有内容都对齐并嵌套良好,并且确保不使用制表符。Haskell缩进取决于空间。