我真的无法弄清楚这样做所必需的语法,这可能是因为我对类型的工作方式缺乏了解。
我想要一个 type DataPoint
,它存储一个元组(x, dataval)
或两个字段 x 和 dataval (其中 x 是 a Double
, dataval 是 a Complex Double
。
我想要一个Monad
类似的实例:
instance Monad (DataPoint x dataval) where
return dataval = DataPoint 0.0 dataval
DataPoint x dataval >>= f = DataPoint x (f dataval)
基本上,monad 的“值”是 dataval,而 x 只是容器的一部分。
我不认为我的语法是正确的。如果我将 DataPoint 定义为
data DataPoint x dataval = DataPoint { x :: Double
, dataval :: Complex Double }
那么它应该工作,对吧?
只有我得到“种类不匹配”
The first argument of `Monad' should have kind `* -> *',
but `DataPoint x dataval' has kind `*'
谁能帮我获得我想要实现的功能/单子?