小编jan*_*ers的帖子

折叠在哈斯克尔的Maybes

为了学习Haskell,我遇到了一种情况,我希望在列表中进行折叠,但我的累加器是一个Maybe.然而,我正在折叠的函数接受了Maybe中的"提取"值,如果一个失败,它们都会失败.我有一个解决方案,我发现kludgy,但我知道像我一样小Haskell,我相信应该有一个更好的方法.假设我们有以下玩具问题:我们想要列出一个列表,但由于某种原因四肢是坏的,所以如果我们在任何时候尝试总计四个,我们想要返回Nothing.我目前的解决方案如下:

import Maybe

explodingFourSum :: [Int] -> Maybe Int
explodingFourSum numberList =
    foldl explodingFourMonAdd (Just 0) numberList
    where explodingFourMonAdd =
        (\x y -> if isNothing x
                    then Nothing
                    else explodingFourAdd (fromJust x) y)

explodingFourAdd :: Int -> Int -> Maybe Int
explodingFourAdd _ 4 = Nothing
explodingFourAdd x y = Just(x + y)
Run Code Online (Sandbox Code Playgroud)

所以基本上,有没有办法在explodingFourMonAdd使用某种Monad折叠时清理或消除lambda ?或者以某种方式在>> =运算符中进行曲线处理,以便折叠表现得像>> =的链接函数列表?

monads haskell

20
推荐指数
3
解决办法
6652
查看次数

Elixir 中的条件编译

我有一个 Elixir 模块,其中包含我在开发和与其他系统的集成测试中使用的演示。我不希望为 prod 环境编译该模块。我可以使用 mix/config 有一些可爱的技巧来确保此模块在某些情况下不可用吗?

elixir

3
推荐指数
1
解决办法
439
查看次数

标签 统计

elixir ×1

haskell ×1

monads ×1