Haskell定义了一个非空列表数据类型

时间:2015-09-03 20:52:31

标签: list haskell types

我已经定义了这样的数据类型来表示2D点:

data Point = Point (Double, Double) deriving (Show)

数据类型曲线(曲线是2D空间中创建曲线的点列表

data Curve  = Curve [Point] deriving (Show)

如何将Curve数据类型设置为非空?所以它总是需要在列表中至少有一个点?

2 个答案:

答案 0 :(得分:2)

流行的semigroups库中的Data.List.NonEmpty模块实现了非空列表类型和实用程序功能。

解决方案实际上与Cactus的答案相同,一对包含必须的第一个元素,然后是其余的列表:

data NonEmpty a = a :| [a]

所以Cactus'Curve类型等同于NonEmpty Point

答案 1 :(得分:1)

列表[Point]将始终包含0个或更多Point个,因此如果您存储一个额外的列表,则会获得1 +(0或更多)= 1或more {{ 1}} S:

Point