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

时间:2015-07-27 20:01:17

标签: 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中有没有更好/惯用的方法来做这些事情?

1 个答案:

答案 0 :(得分:11)

也许您正在寻找join功能:

http://pursuit.purescript.org/packages/purescript-control/0.3.0/docs/Control.Bind#d:join

join将一个结构的两层折叠到一个单独的图层,结合任何效果。对于Maybe,这意味着仅当两个图层都不是Nothing时,结果值才会为Nothing

相关问题