小编dma*_*man的帖子

如何使用"newtype"参数定义Haskell函数?

我已经定义了一个名为Poly的新类型.Poly是多项式的列表表示(Num的列表),我正在尝试定义一个函数"chop",它从Poly的末尾取消多余的0.

Chop将一个Poly作为参数,然后返回Poly.出于某种原因,我收到以下错误消息:

期望一个约束,但'Poly a'在'chop'的类型签名中有'*'类型:chop :: Poly a => a - > a

newtype Poly a = P [a]

chop :: Poly a => a -> a
chop l = if (last l) == 0 then chop (init l) else l
Run Code Online (Sandbox Code Playgroud)

haskell types newtype

4
推荐指数
1
解决办法
628
查看次数

如何在Haskell中向newtype添加相等比较(==)

我正在尝试在Haskell中定义一个名为"Poly"的新类型,其中类型是表示多项式表达式的"Num"列表.[1,2,3]对应于3x ^ 2 + 2x + 1,因此[4,5,6,0,0 ... 0]与[4,5,6]具有相同的多项式.

我已经创建了一个名为"chop"的辅助函数来从列表的末尾删除0,但是我在比较两个列表时遇到了麻烦.任何想法为什么我使用"实例"在这里不起作用?

它编译,但当你尝试比较2个Poly实例时,WinGHCi挂起.

newtype Poly a = P [a]
x :: Num a => Poly a

chop :: (Eq a, Num a) => Poly a -> Poly a
chop (P l) = if (last l) == 0 then chop (P $ init l) else P l

instance (Num a, Eq a) => Eq (Poly a) where
    (==) m n = if (chop m) == (chop n) then True else False
Run Code Online (Sandbox Code Playgroud)

haskell typeclass newtype

2
推荐指数
1
解决办法
130
查看次数

标签 统计

haskell ×2

newtype ×2

typeclass ×1

types ×1