如何在Haskell中fmap元组的第一个元素

Squ*_*zic 2 haskell functor applicative

我试图写一个像

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

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

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

dav*_*420 5

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

first (*1000) (3, 4)
>>> (3000, 4)
Run Code Online (Sandbox Code Playgroud)

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

mapFst (a,s) = case otherFunc (a,s) of
                    Nothing -> ([a], s)
                    Just (as:s') -> (a:as, s')
Run Code Online (Sandbox Code Playgroud)