【发布时间】:2015-09-03 20:52:31
【问题描述】:
我已经定义了一个这样的数据类型来表示一个二维点:
data Point = Point (Double, Double) deriving (Show)
还有一个数据类型曲线(曲线是二维空间中创建曲线的点的列表
data Curve = Curve [Point] deriving (Show)
如何将曲线数据类型设置为非空?所以它总是需要在列表中至少有 1 个点?
【问题讨论】:
-
一种简单的方法是
data Curve = Curve Point [Point]。此外,出于性能原因,您可以使用newtype而不是data来定义Point。 -
@DanielWagner,为什么 Henning 值得警告?他的图书馆有什么我没有注意到的问题吗?
-
@dfeuer 黑线鳕很难阅读,因为每种类型都被命名为
T,每个类都被命名为C。在代码中,这很好,因为他的风格是导入所有合格的东西(所以看起来像NonEmpty.T或Ring.C),但黑线鳕并没有真正优雅地处理这种风格,导致类型签名看起来像(C a, C b) => T a -> T b -> T -> T和其他难以辨认的废话。