haskell - 处理(深度嵌套)仿函数的正确方法是什么?

标签 haskell functor purescript

我有以下简单的代码

import Data.String.Regex
import Data.Array

last <$> match someRegex "   1"

在哪里
match someRegex "   1"

返回类似的东西
Just ([Just ("   1"),Just ("   "),Just ("1")])


last <$> match someRegex "   1"

返回类似的东西
Just (Just (Just ("   1"))) 

现在我有一个深深嵌套的Maybe。这使得它很难使用(甚至使用仿函数)。
我为自己编写了一对辅助函数 - 但我对此有点不满意。不知怎么感觉不太对劲。
extract j = do
    case j of
        Nothing -> Nothing
        Just a -> a
extract2 jj = extract $ extract jj

然后像这样使用它
extract2 $ last <$> match someRegex "   1"

在 Purescript/Haskell 中是否有更好/惯用的方法来做这些事情?

最佳答案

也许您正在寻找 join功能:

http://pursuit.purescript.org/packages/purescript-control/0.3.0/docs/Control.Bind#d:join
join将结构的两层折叠成一层,结合任何效果。在Maybe的情况下,这意味着结果值不会是 Nothing仅当两层都不是 Nothing .

关于haskell - 处理(深度嵌套)仿函数的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31662186/

相关文章:

haskell - GHC 推断我的模糊类型使约束成功

haskell - 组合 Monad 与应用仿函数

C++ 仿函数优势——保持状态

bower - Electron + Purescript + 铝热剂

parsing - 从 Monad 状态上下文中解开值并连接两个状态上下文

prolog - Allegrograph - 像 RDF 对象属性这样的仿函数?

c++ - 在 C++ 中实现(类型化的)K 组合器

monad-transformers - 用于卤素元件的 Monad 变压器

purescript - 如何评估 psci 中的 Eff monad?

haskell - 如何获取与鼠标悬停在某个元素上相对应的 Dynamic Bool?