为了学习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 ?或者以某种方式在>> =运算符中进行曲线处理,以便折叠表现得像>> =的链接函数列表?
我有一个 Elixir 模块,其中包含我在开发和与其他系统的集成测试中使用的演示。我不希望为 prod 环境编译该模块。我可以使用 mix/config 有一些可爱的技巧来确保此模块在某些情况下不可用吗?