Przykłady transformatorów aplikacyjnych Haskella

Wiki na www.haskell.org mówi nam o Transformatorach Aplikacyjnych:

Więc gdzie są transformatory aplikacyjne? Odpowiedź brzmi: nie potrzebujemy specjalnych transformatorów dla funktorów aplikacyjnych, ponieważ można je łączyć w ogólny sposób.http://www.haskell.org/haskellwiki/Applicative_functor#Applicative_transfomers

Spróbowałem połączyć się z następującymi funkcjami. Ale dostałem tylko kilka błędów. Oto kod:

import Control.Applicative
import System.IO

ex x y = (:) <
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"]
gt; 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"]

Daje to wiele błędów typu, które chociaż mogę częściowo zrozumieć, nie mogłem ich w ogóle rozwiązać.

Błędy są podane na końcu.

Jak więc na przykład łączyć Aplikację Maybe i Listę?

Jak na przykład połączyć aplikację państwową z aplikacją list? Czy są jakieś inne przykłady, powiedzmy, łączące „Może” i „Listę”, „Być może” i „Stan”, a na koniec straszne ze wszystkich aplikacji IO i państwowych?

Dzięki.

Następują komunikaty o błędach 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>

questionAnswers(4)

yourAnswerToTheQuestion