Haskell可能是类型构造函数
我试图在将一个整数传递到函数中,并得到一个Haskell可能是类型构造函数,haskell,Haskell,我试图在将一个整数传递到函数中,并得到一个可能是一个类型的上下文中,对可能是类型构造函数进行一个非常简单的实现 我所看到的具体情况是一个函数,它接受一个整数并返回该数字是否在某个范围内 data Maybe Number = Nothing | Just FirstRange | Just SecondRange | Just ThirdRange | Just FourthRange | Just FifthRange deriving(Show) checknum :: Integer
可能是一个类型的上下文中,对可能是类型构造函数进行一个非常简单的实现
我所看到的具体情况是一个函数,它接受一个整数并返回该数字是否在某个范围内
data Maybe Number = Nothing | Just FirstRange | Just SecondRange | Just ThirdRange | Just FourthRange | Just FifthRange
deriving(Show)
checknum :: Integer -> Maybe Number
checknum numinput
|numinput >=0 && < 50 = Just FirstRange
|numinput >=50 && < 60 = Just SecondRange
|numinput >=60 && < 70 = Just ThirdRange
|numinput >=70 && < 80 = Just FourthRange
|numinput >=80 && < 100 = Just FifthRange
|numinput < 0 || numinput > 100 = Nothing
无需定义可能
,只需定义您的编号
类型,然后在可能
中替换“a”:
data Number = FirstRange | SecondRange | ThirdRange | FourthRange | FifthRange
此外,您还缺少一些numinput无需定义可能
,只需定义您的编号
类型,然后用该类型替换可能a中的“a”:
data Number = FirstRange | SecondRange | ThirdRange | FourthRange | FifthRange
此外,您还缺少一些numinput为什么不需要使用Maybe显式地键入construct?@jamesmartiniMaybe
是一个参数化类型,因此它需要一个现有类型来为您提供一个类型。这意味着,如果您在这个答案中定义了Number
类型,您可以对其应用Maybe
以获得Maybe Number
。您可以将它与任何现有类型一起使用,它将起作用。@jamesmartini可能
已经由标准库定义,因为数据可能a=Nothing |只是a
——您不必重新定义它。如果将a
替换为Number
(即,如果使用Maybe Number
),您将得到所需的内容。为什么不需要使用Maybe显式键入construct?@jamesmartiniMaybe
是一个参数化类型,因此它需要一个现有类型来为您提供一个类型。这意味着,如果您在这个答案中定义了Number
类型,您可以对其应用Maybe
以获得Maybe Number
。您可以将它与任何现有类型一起使用,它将起作用。@jamesmartini可能
已经由标准库定义,因为数据可能a=Nothing |只是a
——您不必重新定义它。如果将a
替换为Number
(即,如果您使用可能是Number
),您将得到您所需要的。无关:如果您想确保涵盖所有可能的情况,请使用“否则=无”作为最后的防护措施。相反,使用手工制作的保护来补充之前的所有保护更容易出错。无关:如果您想确保涵盖所有可能的情况,请使用“否则=无”作为最后一个保护。相反,使用一个手工制作的保护来补充之前的所有保护更容易出错。