30 lines
789 B
Plaintext
30 lines
789 B
Plaintext
module TypeClass
|
|
|
|
-- experiment on one option for typeclass (we don't have record yet)
|
|
|
|
-- we need a bit more than this, but
|
|
data Monad : (U -> U) -> U where
|
|
MkMonad : { M : U -> U } ->
|
|
(bind : {A B : U} -> (M A) -> (A -> M B) -> M B) ->
|
|
Monad M
|
|
|
|
data Maybe : U -> U where
|
|
Just : {A : U} -> A -> Maybe A
|
|
Nothing : {A : U} -> Maybe A
|
|
|
|
|
|
-- NEXT trying to get this to work. An equivalence is not found in pattern
|
|
-- matching
|
|
|
|
-- [instance]
|
|
MaybeMonad : Monad Maybe
|
|
-- Agda case lambda might be nice..
|
|
-- The {Maybe} isn't solved in type for the case
|
|
MaybeMonad = MkMonad {Maybe} (\ {A} ma amb =>
|
|
case ma of
|
|
Nothing => Nothing
|
|
-- It doesn't discover pat$5 is A during pattern matching
|
|
-- oh, but var 0 value is var5
|
|
Just a => amb a)
|
|
|