Marc Weber wrote:
structure My_Ord : MY_ORD = struct
   class strict_less a = a ->  a ->  bool
   fun lt [a] (f: strict_less a) (x:a) (y:a) = f x y
   (* causing Can't resolve type class instance
      Class constraint:  Basis.eq a
   *)
   fun le [a] (f: strict_less a) (x:a) (y:a) = f x y || x = y
end

The le implementation does not know which eq implementation to use ?

Perhaps it would be useful for you to review the concept of type classes in Haskell. They are very similar in Ur.

In your code above, nowhere have you declared that type [a] belongs to class [eq], so of course you are not allowed to use [=] on [a] values.

Two solutions that come to mind:
1) Add an [eq a] argument to [le].
2) Extend the definition of [strict_less a] to contain an [eq a], too. (Though this seems to create some dissonance with the words "strict less"!)


_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to