-1

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

1 回答 1

4

我认为您误解了数据类型在 Haskell 中的工作方式。

你的wallet数据类型说的是

我将在标签 Wallet 下只存储一把尺子、颜色和一些铅笔。

这意味着其中Wallet只有 1 个Ruler,并且永远只能有 1 个Ruler

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

然后你的功能变成:

isRulerAvailable (Wallet _ ruler _) = isJust ruler

这需要你import Data.Maybe

的解释Maybe,你可以看这里

于 2013-05-14T19:08:18.933 回答