Как отобразить первый элемент кортежа в haskell - PullRequest
2 голосов
/ 01 апреля 2012

Я пытаюсь написать такую ​​функцию, как

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 контейнера

Ответы [ 2 ]

4 голосов
/ 01 апреля 2012

Это не ясно из вашего вопроса, но я думаю, что вы хотите 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')
2 голосов
/ 01 апреля 2012
mapFst (a,s) = let (as, s') = otherFunc (a,s) in (a:as, s)

(Непонятно, как вы хотите обрабатывать String с: вы можете изменить s на s' или s ++ s' или все, что нужно.)

...