coding style - Unwrapping datatypes in Haskell without extraneous code -
say have
x = 2 is there way (preferrably builtin mechanism/function) use x in single statement such if just, 2 automatically unwrapped , used, , if nothing, exception raised?
that is,
(f x) + 2 == 4 if x == 2, , raises exception if x == nothing.
data.maybe.fromjust has been mentioned other answers already:
fromjust :: maybe -> fromjust nothing = error "maybe.fromjust: nothing" fromjust (just x) = x there's maybe (found in both prelude , data.maybe):
maybe :: b -> (a -> b) -> maybe -> b maybe n _ nothing = n maybe _ f (just x) = f x fromjust can written using maybe:
fromjust = maybe (error "maybe.fromjust: nothing") id as can see, maybe allows flexibility in handling both cases without requiring pattern matching:
\x -> maybe 0 (+ 2) x -- nothing -> 0, 2 -> 4 similarly, prelude , data.either have either :: (a -> c) -> (b -> c) -> either b -> c:
\x -> either (subtract 1) (* 2) x -- left 5 -> 4, right 3 -> 6 if define data type
data mydatatype = typea { foo :: int, bar :: string } | typeb { foo :: int, baz :: () } | typec { bar :: string, baz :: () } like this, end partial functions accessors.
foo :: mydatatype -> int bar :: mydatatype -> string baz :: mydatatype -> () they're called partial functions, opposed total functions, because return results subset of inputs.
foo (typea { foo = 15, bar = "hello!" }) -- 15 bar (typeb { foo = 12345679, baz = () }) -- error
Comments
Post a Comment