我正在编写一个Haskell程序。我创建了一个名为“measurement”的数据类型,它是一个double数组,看起来像这样:
data Measurement = Measurement [Double] deriving (Show)
我有一个将数据转化为Measurement的函数,它接受一个双重列表并将其转化为一个Measurement的列表。具体实现如下:
castToMeasurement :: [[Double]] -> [Measurement]
castToMeasurement = map Measurement
但现在我想对双精度值进行一些操作。那么有没有一种方法可以将其映射到一个双精度数组?所以当我给出一个测量值(或测量值列表)时,它会将其转换为双精度列表(或双精度列表的列表)。谢谢!
data MyType = SingleConstructor ExistingType
或者data MyType parameter = SingleConstructor (ExistingTypeExpression parameter)
时,你应该使用一个新类型,比如newtype MyType = SingleConstructor {getSingleConstructor :: ExistingType}
等等。newtype
声明的工作方式与data
声明非常相似,只是因为只允许一个构造函数,编译器可以实现避免错误的编译时类型安全,但是SingleConstructor
和getSingleConstructor
实现为无操作,因此在运行时没有空间或时间影响。 - AndrewCMeasurement
是一个列表,而不是一个数组。在Haskell中,这些结构非常不同。此外,在这种情况下,您应该考虑从data
切换到newtype
,因为newtype
可以在像castToMeasurement
这样的情况下提供渐近更好的性能,特别是在最新的GHC中。 - dfeuer