3

私は次のような関数を書き込もうとしています

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

ここでは、タプルの最初の要素に基づいてリストを作成しようとしていますが、どのように進めるかがわかりません。タプル以外の場合でも実行できますが、fstこの構成内での使用方法がわかりません(そもそもその関数を使用する必要がある場合)。

この関数は同じタイプの別の関数とインターフェイスしますが、入力の処理方法が少し異なります。Maybeタプルはコンテナ内にあるため、fmapとapを使用する必要があります

4

2 に答える 2

6

firstあなたの質問からは明らかではありませんが、Control.Arrowから欲しいと思います。

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

あなたの編集とdbaupの答えに基づいて構築してください。

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)

(sをどのように処理するかは明確ではありません。toまたはまたは必要なものをString変更できます。)ss's ++ s'

于 2012-04-01T09:09:47.117 に答える