我有一个预定义的类:
data Wave = Wave [Double]推导(显示,等式)
我想在类中使用函数'map',因此我必须访问[Double]值。但是我不知道如何。
我在这里查看:访问自定义数据类型的成员在Haskell中,但这没有回答我的问题,因为我无法更改该类(或该类的名称参数)。
我试图写:
waveToDoubleList :: Wave-> [Double]
(波)=波
答案 0 :(得分:12)
您忘记包含功能名称:
waveToDoubleList :: Wave -> [Double]
waveToDoubleList (Wave wave) = wave
----------------
现在它应该可以工作了。
(Wave wave)
被称为模式。此功能通过模式匹配起作用。
Wave
有两个作用:作为数据构造函数或模式名称;并作为类型的名称。
开始学习Haskell时,您可能需要为这些角色使用单独的名称:
data Wave = MkWave [Double] deriving (Show, Eq)
waveToDoubleList :: Wave -> [Double]
waveToDoubleList (MkWave wave) = wave
Wave
是一种类型;我们使用MkWave
数据构造函数创建此类型的值。
答案 1 :(得分:6)
您可以非常轻松地命名数据类型的参数。例如
data Wave = Wave { waveContents :: [Double] } deriving (Show, Eq)
这将产生一个函数waveContents :: Wave -> [Double]
。您也可以用以下相同的方式构造数据:Wave [1.2, 2.3] :: Wave
。
以下是如何使用此示例:
λ myWave = Wave [1.2, 2.3, 3.4]
λ waveContents myWave
[1.2, 2.3, 3.4]
λ Wave $ map (+1) $ waveContents myWave
Wave [2.2, 3.3, 4.4]