Haskell 有没有更简洁的方法来编写这个简单的片段?
所以我试图学习haskell,在使用Maybe类型时,我想到了这个简单的代码片段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来写这篇文章。我重写代码块的惯用或
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)
。(顺便说一句,对于您提出的解决方案,前面的两个定义只是语法上的糖分。)