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