Haskell 如何将a转换为a或-1(免费)?

Haskell 如何将a转换为a或-1(免费)?,haskell,maybe,Haskell,Maybe,我将行转换为a,不转换为-1,其中a是Int 我的职能是: --Converts Just a to a && Nothing to -1 justToIntOnly :: (Integral a) => Maybe a -> a justToIntOnly Just a = a justToIntOnly Nothing = -1 我得到的错误是: “justToInOnly”的方程式具有不同数量的参数” 我真的不明白发生了什么,你只是忘记了括号,记住你所做的实际

我将行转换为a,不转换为-1,其中a是Int

我的职能是:

--Converts Just a to a && Nothing to -1
justToIntOnly :: (Integral a) => Maybe a -> a
justToIntOnly Just a = a
justToIntOnly Nothing = -1
我得到的错误是: “justToInOnly”的方程式具有不同数量的参数”


我真的不明白发生了什么,

你只是忘记了括号,记住你所做的实际上是一个模式匹配:

--Converts Just a to a && Nothing to -1
justToIntOnly :: (Integral a) => Maybe a -> a
justToIntOnly (Just a) = a
justToIntOnly Nothing  = -1
正如有人在评论中指出的那样,已经有一些函数可以处理您需要的
Maybe
,您可以在Hoogle中搜索
Maybe a->a

maybe函数接受默认值、函数和maybe值。如果Maybe值为Nothing,则函数返回默认值。否则,它将函数应用于Just中的值并返回结果

maybe :: b -> (a -> b) -> Maybe a -> b
你可以像这样使用它

justToIntOnly = maybe (-1) id
更好的函数应该是
fromaybe::a->Maybe a->a
,它接受一个默认值和一个可能的值。如果Maybe为Nothing,则返回默认值;否则,它将返回Maybe中包含的值

justToIntOnly = fromMaybe (-1)

你只是忘记了括号,记住你所做的实际上是一个模式匹配:

--Converts Just a to a && Nothing to -1
justToIntOnly :: (Integral a) => Maybe a -> a
justToIntOnly (Just a) = a
justToIntOnly Nothing  = -1
正如有人在评论中指出的那样,已经有一些函数可以处理您需要的
Maybe
,您可以在Hoogle中搜索
Maybe a->a

maybe函数接受默认值、函数和maybe值。如果Maybe值为Nothing,则函数返回默认值。否则,它将函数应用于Just中的值并返回结果

maybe :: b -> (a -> b) -> Maybe a -> b
你可以像这样使用它

justToIntOnly = maybe (-1) id
更好的函数应该是
fromaybe::a->Maybe a->a
,它接受一个默认值和一个可能的值。如果Maybe为Nothing,则返回默认值;否则,它将返回Maybe中包含的值

justToIntOnly = fromMaybe (-1)

添加PaleNeScript <代码> SuthtoTimIn(仅A)< /代码>。同时检查函数
maybe
from
Data.maybe
justToOnly=Data.maybe.fromMaybe(-1)
我想知道为什么要进行这样的转换。请注意,在Haskell中,将“无效”整数结果表示为
-1
并不是惯用方法,使用
Nothing
将是正确的方法。除非你需要与一些软件/服务器/库/格式/任何要求
-1
的东西进行交互,否则你应该保持你的
没有任何东西
。我需要这样做,因为我想使用elemIndex函数的结果来实际访问列表中的索引。这听起来很奇怪
elemIndex
需要一个元素
x
进行搜索,并在搜索成功时为您提供
索引。如果在
索引处访问列表
,则返回搜索的元素
x
。这不是没有必要吗?此外,我们还有很多函数可以使用
可能是Int
,包括
fmap
和所有应用程序/一元函数。如果我们有
position::Maybe Int
,我们可以使用
(list!!)position
并获得
Just element
(如果
position==Just index
)或
Nothing
(否则)。这一特性得到了很好的传播,这是它应该得到的。使用
case。。也是一个较低级别的选择。添加PaleEntIs<代码> SuthtoTimIn(仅A)。同时检查函数
maybe
from
Data.maybe
justToOnly=Data.maybe.fromMaybe(-1)
我想知道为什么要进行这样的转换。请注意,在Haskell中,将“无效”整数结果表示为
-1
并不是惯用方法,使用
Nothing
将是正确的方法。除非你需要与一些软件/服务器/库/格式/任何要求
-1
的东西进行交互,否则你应该保持你的
没有任何东西
。我需要这样做,因为我想使用elemIndex函数的结果来实际访问列表中的索引。这听起来很奇怪
elemIndex
需要一个元素
x
进行搜索,并在搜索成功时为您提供
索引。如果在
索引处访问列表
,则返回搜索的元素
x
。这不是没有必要吗?此外,我们还有很多函数可以使用
可能是Int
,包括
fmap
和所有应用程序/一元函数。如果我们有
position::Maybe Int
,我们可以使用
(list!!)position
并获得
Just element
(如果
position==Just index
)或
Nothing
(否则)。这一特性得到了很好的传播,这是它应该得到的。使用
case。。of
也是一个较低级别的选项。