3

我正在尝试编写一个类似的函数

mapFst :: Maybe (a, String) -> Maybe ([a], String)
mapFst (a,s) = (:) <$> (a,s) <*> [other fun with same type as mapFst] (a,s)

在这里,我正在尝试基于元组的第一个元素构建一个列表,但我不确定如何继续。我可以为非元组执行此操作,但不确定如何fst在此构造中使用(如果我应该首先使用该函数)。

此函数将与另一个相同类型的函数交互,但处理输入的方式略有不同。我需要使用 fmap 和 ap 因为元组在Maybe容器内

4

2 回答 2

6

您的问题尚不清楚,但我认为您希望first从 Control.Arrow 获得。

first (*1000) (3, 4)
>>> (3000, 4)

基于您的编辑和 dbaupp 的回答,也许您想要

mapFst (a,s) = case otherFunc (a,s) of
                    Nothing -> ([a], s)
                    Just (as:s') -> (a:as, s')
于 2012-04-01T09:20:04.523 回答
2
mapFst (a,s) = let (as, s') = otherFunc (a,s) in (a:as, s)

(不清楚你想如何处理Strings:你可以改变stos's ++ s'或任何需要的东西。)

于 2012-04-01T09:09:47.117 回答