Haskell 有没有更简洁的方法来编写这个简单的片段?

Haskell 有没有更简洁的方法来编写这个简单的片段?,haskell,Haskell,所以我试图学习haskell,在使用Maybe类型时,我想到了这个简单的代码片段 import Data.Maybe betterDouble :: Maybe Int -> Maybe Int betterDouble x = case x of Just y -> Just (y * 2) Nothing -> Nothing 这似乎笨重而冗长。我忍不住觉得有一种更简洁的方法可以用haskell来写这篇文章。我重写代码块的惯用或

所以我试图学习haskell,在使用Maybe类型时,我想到了这个简单的代码片段

import Data.Maybe
betterDouble :: Maybe Int -> Maybe Int
betterDouble x =
    case x of
         Just y -> Just (y * 2)
         Nothing -> Nothing

这似乎笨重而冗长。我忍不住觉得有一种更简洁的方法可以用haskell来写这篇文章。我重写代码块的惯用或简洁方式是什么?

因为
可能是一个函子,所以可以使用
fmap
映射其内容:

betterDouble = fmap (* 2)

由于
可能
是一个函子,因此可以使用
fmap
映射其内容:

betterDouble = fmap (* 2)

.@Alex那就是我读的,尽管我没有读到你建议的那一章。对于如何有效地使用Maybe类型类,我仍然感到困惑。我甚至花了一段时间才让我展示的代码片段发挥作用,而当我这么做的时候,它看起来“愚蠢”而且毫无用处。但现在我更清楚了:)@JeffreyPhillipsFreeman
也许是那本书中的一匹主力。。。更多的功能(如应用函子/单子的使用)将在后面的章节中显示。@Alex谢谢,期待着。虽然我认为他们在介绍方面可以做得更好,也许至少可以展示一些更基本的用法。但是,嘿,这本书在这一点上都是金色的,所以它只是一个小评论。我相信随着我的继续,事情会变得更有意义。我觉得对你来说,
也许
的名声比这更重要。LYAH给出了一个示例,说明如何在引入
data
关键字后立即对自定义数据类型进行模式匹配。在
的情况下,您只需将其扩展到
betterDouble Nothing=Nothing
betterDouble(just y)=just(y*2)
。(顺便说一句,对于你提出的解决方案来说,前面的两个定义只是语法上的糖分。)@Alex这就是我正在读的,尽管我没有读到你建议的那一章。对于如何有效地使用Maybe类型类,我仍然感到困惑。我甚至花了一段时间才让我展示的代码片段发挥作用,而当我这么做的时候,它看起来“愚蠢”而且毫无用处。但现在我更清楚了:)@JeffreyPhillipsFreeman
也许是那本书中的一匹主力。。。更多的功能(如应用函子/单子的使用)将在后面的章节中显示。@Alex谢谢,期待着。虽然我认为他们在介绍方面可以做得更好,也许至少可以展示一些更基本的用法。但是,嘿,这本书在这一点上都是金色的,所以它只是一个小评论。我相信随着我的继续,事情会变得更有意义。我觉得对你来说,
也许
的名声比这更重要。LYAH给出了一个示例,说明如何在引入
data
关键字后立即对自定义数据类型进行模式匹配。在
的情况下,您只需将其扩展到
betterDouble Nothing=Nothing
betterDouble(just y)=just(y*2)
。(顺便说一句,对于您提出的解决方案,前面的两个定义只是语法上的糖分。)