50 lines
1 KiB
Text
50 lines
1 KiB
Text
-- data Bool () where {
|
|
-- True : Bool ()
|
|
-- False : Bool ()
|
|
-- };
|
|
--
|
|
-- data List ('a) where {
|
|
-- Nil : List ('a)
|
|
-- Cons : ('a) -> List ('a) -> List ('a)
|
|
-- };
|
|
|
|
data Maybe ('a) where {
|
|
Nothing : Maybe ('a)
|
|
Just : 'a -> Maybe ('a)
|
|
};
|
|
|
|
-- id : 'a -> 'a ;
|
|
-- id x = x ;
|
|
|
|
-- main : Maybe ('a -> 'a) ;
|
|
-- main = Just id;
|
|
|
|
-- data Either ('a 'b) where {
|
|
-- Left : 'a -> Either ('a 'b)
|
|
-- Right : 'b -> Either ('a 'b)
|
|
-- };
|
|
|
|
-- safeHead : List ('a) -> Maybe ('a) ;
|
|
-- safeHead xs =
|
|
-- case xs of {
|
|
-- Nil => Nothing ;
|
|
-- Cons x xs => Just x
|
|
-- };
|
|
|
|
-- main : Maybe (_Int) ;
|
|
-- main = safeHead (Cons 0 (Cons 1 Nil)) ;
|
|
--
|
|
-- maybeToEither : Either ('a 'b) -> Maybe ('a) ;
|
|
-- maybeToEither e =
|
|
-- case e of {
|
|
-- Left y => Nothing ;
|
|
-- Right x => Just x
|
|
-- };
|
|
|
|
-- Bug. f not included in the case-expression context
|
|
fmap : ('a -> 'b) -> Maybe ('a) -> Maybe ('b) ;
|
|
fmap f x =
|
|
case x of {
|
|
Just x => Just (f x) ;
|
|
Nothing => Nothing
|
|
}
|