diff options
author | Adam Chlipala <adamc@hcoop.net> | 2009-03-26 15:54:04 -0400 |
---|---|---|
committer | Adam Chlipala <adamc@hcoop.net> | 2009-03-26 15:54:04 -0400 |
commit | 024acc734f4a323883adb5e9a68f5f4f753e60cc (patch) | |
tree | ddd45517e0df460b44d219633cdb5645f5d29bf8 /tests/type_class.ur | |
parent | ea1046a80313fc7f22c97587bdffb3f90e91eb98 (diff) |
Enforce termination of type class instances
Diffstat (limited to 'tests/type_class.ur')
-rw-r--r-- | tests/type_class.ur | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/tests/type_class.ur b/tests/type_class.ur index a41ccdc8..8c77bbad 100644 --- a/tests/type_class.ur +++ b/tests/type_class.ur @@ -10,10 +10,16 @@ structure M : sig val option_default : t ::: Type -> default t -> default (option t) val pair_default : a ::: Type -> b ::: Type -> default a -> default b -> default (pair a b) + (*val uh_oh : t ::: Type -> default t -> default t*) + class awesome val awesome_default : t ::: Type -> awesome t -> default t val float_awesome : awesome float + + val oh_my : t ::: Type -> awesome (option t) -> awesome (option t) + + val awesome : t ::: Type -> awesome t -> t end = struct class default t = t fun get (t ::: Type) (x : t) = x @@ -24,10 +30,16 @@ end = struct fun option_default (t ::: Type) (x : t) = Some x fun pair_default (a ::: Type) (b ::: Type) (x : a) (y : b) = Pair (x, y) + (*fun uh_oh (t ::: Type) (x : t) = x*) + class awesome t = t fun awesome_default (t ::: Type) (x : t) = x val float_awesome = 1.23 + + fun oh_my (t ::: Type) (x : option t) = x + + fun awesome (t ::: Type) (x : t) = x end open M @@ -49,6 +61,8 @@ fun show_option (t ::: Type) (_ : show t) : show (option t) = None => "None" | Some y => show y) +(*val x : option float = awesome*) + fun show_pair (a ::: Type) (b ::: Type) (_ : show a) (_ : show b) : show (pair a b) = mkShow (fn x => case x of |