joining some lookup tables Integer to Character 1 => 'a' 2 => 'b' 3 => 'c' Character to String 'a' => "foo" 'b' => "bar" String to Msg "foo" => "No bar here" "bar" => "You found the bar"
import Dict exposing (get, fromList) findC n = get n (fromList [ ( 1, 'a' ), ( 2, 'b' ), (3, 'c') ]) findS c = get c (fromList [ ( 'a', "foo" ), ( 'b', "bar" ) ]) findM s = get s (fromList [ ( "foo", "No bar here" ) , ( "bar", "You found the bar" ) ] )
==================================== ERRORS ==================================== -- TYPE MISMATCH --------------------------------------------- repl-temp-000.elm The right argument of (|>) is causing a type mismatch. 5| findC 2 |> findS ^^^^^ (|>) is expecting the right argument to be a: Maybe Char -> a But the right argument is: Char -> Maybe String Hint: I always figure out the type of the left argument first and if it is acceptable on its own, I assume it is "correct" in subsequent checks. So the problem may actually be in how the left and right arguments interact.
andThen : Maybe a -> (a -> Maybe b) -> Maybe b andThen x f = case x of Nothing -> Nothing Just a -> f a find n = findC n `andThen` findS `andThen` findM > find 1 Nothing : Maybe.Maybe Msg > find 2 Just "You found the bar" : Maybe.Maybe Msg
elm: generalised andThen for all computations that can return nothing or fail haskell: generalised for even more contexts (>>=) :: m a -> (a -> m b) -> m b aka "bind"