diff options
author | msozeau <msozeau@85f007b7-540e-0410-9357-904b9bb8a0f7> | 2009-01-18 17:36:51 +0000 |
---|---|---|
committer | msozeau <msozeau@85f007b7-540e-0410-9357-904b9bb8a0f7> | 2009-01-18 17:36:51 +0000 |
commit | 895fcffc774abada4677d52a7dbbb54a85cadec7 (patch) | |
tree | e41dcf2165785554a8859b67b8ba4f7869fdcb02 /toplevel/classes.ml | |
parent | bf9379dc09f413fab73464aaaef32f7d3d6975f2 (diff) |
Last changes in type class syntax:
- curly braces mandatory for record class instances
- no mention of the unique method for definitional class instances
Turning a record or definition into a class is mostly a
matter of changing the keywords to 'Class' and 'Instance' now.
Documentation reflects these changes, and was checked once more
along with setoid_rewrite's and Program's.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@11797 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'toplevel/classes.ml')
-rw-r--r-- | toplevel/classes.ml | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/toplevel/classes.ml b/toplevel/classes.ml index 7ff942253..081d18292 100644 --- a/toplevel/classes.ml +++ b/toplevel/classes.ml @@ -185,9 +185,17 @@ let new_instance ?(global=false) ctx (instid, bk, cl) props ?(generalize=true) end else begin - let props = match props with CRecord (loc, _, fs) -> fs | _ -> assert false in - if List.length props > List.length k.cl_props then - mismatched_props env' (List.map snd props) k.cl_props; + let props = + match props with + | CRecord (loc, _, fs) -> + if List.length fs > List.length k.cl_props then + mismatched_props env' (List.map snd fs) k.cl_props; + fs + | _ -> + if List.length k.cl_props <> 1 then + errorlabstrm "new_instance" (Pp.str "Expected a definition for the instance body") + else [(dummy_loc, Nameops.out_name (pi1 (List.hd k.cl_props))), props] + in let subst = match k.cl_props with | [(na,b,ty)] -> |