summaryrefslogtreecommitdiff
path: root/tests/type_class.ur
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-03-26 15:54:04 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-03-26 15:54:04 -0400
commitb80bc0fde66898326c077f7a3aa47151d7f9e755 (patch)
treeddd45517e0df460b44d219633cdb5645f5d29bf8 /tests/type_class.ur
parent88f948c12e78d9e3e75eb28864ade3395e5c6c86 (diff)
Enforce termination of type class instances
Diffstat (limited to 'tests/type_class.ur')
-rw-r--r--tests/type_class.ur14
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