我对Haskell很陌生。我正在尝试为不同的容器重载自定义函数“ myadd”。我的理解是,您必须通过课堂来做到这一点。这是我尝试的:
class Addition a where
myadd :: a -> a -> a
instance Addition Int where
myadd a b = a + b
instance Addition Maybe where
myadd (Just a) (Just b) = Just (a + b)
main = do
let a = 3 :: Int
let b = 4
let c = myadd a b
print c
let d = (Just a)
let e = (Just b)
let f = myadd d e
print f
但我得到以下错误:
test.hs:7:19: error:
? Expecting one more argument to ‘Maybe’
Expected a type, but ‘Maybe’ has kind ‘* -> *’
? In the first argument of ‘Addition’, namely ‘Maybe’
In the instance declaration for ‘Addition Maybe’
Addition
有善意* -> *
,因此对的论点Addition
必须是善意*
。Maybe
有善良* -> *
。您需要传递一个额外的type参数,Maybe
以使其具有kind *
。
instance Addition (Maybe a)
问题是这Maybe a
不是Addition
for任意的实例a
,仅是for的a
实例Addition
。您可以指定这样a
的实例的要求Addition
:
instance Addition a => Addition (Maybe a)
您的实现也应该使用myadd
而不是+
:
instance Addition a => Addition (Maybe a) where
myadd (Just a) (Just b) = Just (myadd a b)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句