Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 如何编写控制数据端的函数来决定是否存在数据类型?_Function_Haskell - Fatal编程技术网

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

Function 如何编写控制数据端的函数来决定是否存在数据类型?,function,haskell,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 =Bl

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

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

您的
钱包
数据类型显示的是

我会把一把尺子、颜色和一些铅笔放在标签钱包下面

这意味着
钱包
中只有一个
标尺
,并且只能有一个
标尺

如果您想允许不存储
标尺
的可能性,那么您应该在数据声明中使用
可能标尺
,而不仅仅是
标尺

然后,您的函数变成:

isRulerAvailable (Wallet _ ruler _) = isJust ruler
这要求您
导入数据。可能


有关
的解释,请查看

是否可以编辑问题中的代码,使其成为有效的Haskell代码。如果您的
AMap
类型是按我猜您的意思定义的,则每个
AMap
值必须正好包含一个
Work
值,然后你的问题就没有多大意义了…你是想在前四行的开头有关键字
data
?好的,我编辑了。很抱歉第一行,如果我将它定义为maybe标尺,那么我应该输入一个maybe值,该值为Nothing或仅仅是a。因此,当我给Nothing时,它返回False,这是可以的,但我如何才能使它成为maybe标尺return True.isJust对于just case返回True,对于Nothing case返回False,这正是您想要的