如何编写控制数据结束的函数来决定数据类型是否存在?

时间:2013-05-14 18:30:47

标签: function haskell

我想知道我们是否能够控制数据类型并决定输入的数据是否存在于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

1 个答案:

答案 0 :(得分:4)

我认为你误解了Haskell中数据类型的工作原理。

您的wallet数据类型所指的是

  

我会在标签钱包下存储一个标尺,颜色和一些铅笔。

这意味着Wallet只有1 Ruler,其中只能包含1 Ruler

如果您想允许不存储Ruler,那么您在数据声明中使用Maybe Ruler,而不仅仅是Ruler

然后你的功能变为:

isRulerAvailable (Wallet _ ruler _) = isJust ruler

这要求您import Data.Maybe

有关Maybe的说明,您可以查看here