В вики на www.haskell.org рассказывается следующее об аппликативных преобразователях:
Так где же прикладные трансформаторы? Ответ заключается в том, что нам не нужны специальные преобразователи для аппликативных функторов, поскольку их можно комбинировать обычным образом. http://www.haskell.org/haskellwiki/Applicative_functor#Applicative_transfomers
Я попробовал следующее, чтобы попытаться объединить несколько аппликативных функторов. Но все, что у меня было, это куча ошибок. Вот код:
import Control.Applicative
import System.IO
ex x y = (:) <$> x <*> y
test1 = ex "abc" ["pqr", "xyz"] -- only this works correctly as expected
test2 = ex "abc" [Just "pqr", Just "xyz"]
test3 = ex "abc" (Just "pqr")
test4 = ex (Just 'a') ["pqr", "xyz"]
test5 = ex (return ("abc"):: IO ()) [Just "pqr", Just "xyz"]
Это приводит к множеству ошибок типа, которые, хотя я частично понимаю, я не мог их исправить.
Ошибки указаны в конце.
Итак, как мне, например, объединить аппликатив «Может быть» и аппликативный список?
Как, например, объединить государственного заявителя и кандидата в список? Есть ли какие-нибудь другие примеры, скажем, комбинирования Maybe и List, Maybe и State и, наконец, ужасного из всех заявлений IO и State?
Спасибо.
Сообщения об ошибках GHCi следуют ниже.
example.hs:6:19:
Couldn't match expected type `[Char]' with actual type `Maybe a0'
In the return type of a call of `Just'
In the expression: Just "pqr"
In the second argument of `ex', namely `[Just "pqr", Just "xyz"]'
example.hs:7:19:
Couldn't match expected type `[[Char]]' with actual type `Maybe a0'
In the return type of a call of `Just'
In the second argument of `ex', namely `(Just "pqr")'
In the expression: ex "abc" (Just "pqr")
example.hs:8:23:
Couldn't match expected type `Maybe' with actual type `[]'
In the second argument of `ex', namely `["pqr", "xyz"]'
In the expression: ex (Just 'a') ["pqr", "xyz"]
In an equation for `test4': test4 = ex (Just 'a') ["pqr", "xyz"]
example.hs:9:21:
Couldn't match expected type `()' with actual type `[Char]'
In the first argument of `return', namely `("abc")'
In the first argument of `ex', namely `(return ("abc") :: IO ())'
In the expression:
ex (return ("abc") :: IO ()) [Just "pqr", Just "xyz"]
Failed, modules loaded: none.
Prelude>
StateT s IO a
- этоApplicative
, но это не композиция любых двух аппликативов. - person Turion   schedule 07.05.2018