Function 如何编写控制数据端的函数来决定是否存在数据类型?
我想知道我们是否能够控制数据类型并确定输入的数据是否存在于Haskell中 例如: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
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,这正是您想要的