我想知道我们是否能够控制数据类型并决定输入的数据是否存在于Haskell中?
例如:
data Ruler =Ruler Length Price deriving(Eq,Show)
data Wallet = Wallet Colour Ruler [Pencil] deriving(Eq,Show)
data Pencil =Pencil Penciltype Colour Price deriving(Eq,Show)
data Colour =Black | Blue | Green | Red deriving(Eq,Show)
data Penciltype =Leadpencil | Pen | Fountainpen | Feltpen deriving(Eq,Show)
type Price =Double
type Length =Int
所有想法?
我想定义一个类似的函数:
isRulerAvailable :: Wallet-> Bool
if Ruler is Available in Wallet then True
else False
答案 0 :(得分:4)
我认为你误解了Haskell中数据类型的工作原理。
您的wallet
数据类型所指的是
我会在标签钱包下存储一个标尺,颜色和一些铅笔。
这意味着Wallet
只有1 Ruler
,其中只能包含1 Ruler
。
如果您想允许不存储Ruler
,那么您在数据声明中使用Maybe Ruler
,而不仅仅是Ruler
。
然后你的功能变为:
isRulerAvailable (Wallet _ ruler _) = isJust ruler
这要求您import Data.Maybe
。
有关Maybe
的说明,您可以查看here