]> matita.cs.unibo.it Git - helm.git/commitdiff
Good:
authorClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Fri, 19 Jun 2009 07:21:49 +0000 (07:21 +0000)
committerClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Fri, 19 Jun 2009 07:21:49 +0000 (07:21 +0000)
1) all set_* methods are now polymorphic
2) no more :> coercions
3) no more technical class types

Bad:
1) some polymorphic set_* methods have explicit row types that are
   problematic when extending another class in another file. The
   row types should just be #classname, but ocaml rejects them that
   way.

13 files changed:
helm/software/components/grafite_parser/nEstatus.ml
helm/software/components/grafite_parser/nEstatus.mli
helm/software/components/lexicon/lexiconEngine.ml
helm/software/components/lexicon/lexiconEngine.mli
helm/software/components/ng_kernel/nCicLibrary.ml
helm/software/components/ng_kernel/nCicLibrary.mli
helm/software/components/ng_refiner/nCicCoercion.ml
helm/software/components/ng_refiner/nCicCoercion.mli
helm/software/components/ng_refiner/nCicUnifHint.ml
helm/software/components/ng_refiner/nCicUnifHint.mli
helm/software/components/ng_refiner/nRstatus.ml
helm/software/components/ng_refiner/nRstatus.mli
helm/software/components/ng_tactics/nTactics.ml

index d7737cde959fdc382b4e927c287a51519d18579b..0c6e91095d4502bd0052afe6c89aa0d1b952ab44 100644 (file)
 
 (* $Id: nCic.ml 9058 2008-10-13 17:42:30Z tassi $ *)
 
-class type ctstatus =
- object ('self)
-  inherit LexiconEngine.status
-  inherit NRstatus.dumpable_status
-  method set_estatus: ctstatus -> 'self
- end
-
-class status : ctstatus =
+class status =
  object (self)
   inherit LexiconEngine.status
   inherit NRstatus.dumpable_status
-  method set_estatus o =
-   (self#set_lexicon_engine_status (o :> LexiconEngine.status))
-        #set_dumpable_status       (o :> NRstatus.dumpable_status)
+  method set_estatus
+   : 'status.
+      < coerc_db : NCicCoercion.db;
+        uhint_db : NCicUnifHint.db;
+        timestamp: NCicLibrary.timestamp;
+        dump: NRstatus.Serializer.obj list;
+        lstatus: LexiconEngine.lexicon_status; .. > as 'status -> 'self
+   = fun o -> (self#set_lexicon_engine_status o)#set_dumpable_status o
  end
index e77f4e5665cd1088de8fe0010a75b0560911dca9..dec3aca01280fe3e4ebb21b4c4f4a37cd54c299c 100644 (file)
@@ -15,5 +15,10 @@ class status :
  object ('self)
   inherit LexiconEngine.status
   inherit NRstatus.dumpable_status
-  method set_estatus: status -> 'self
+  method set_estatus:
+   < coerc_db : NCicCoercion.db;
+     uhint_db : NCicUnifHint.db;
+     timestamp: NCicLibrary.timestamp;
+     dump: NRstatus.Serializer.obj list;
+     lstatus: LexiconEngine.lexicon_status; .. > -> 'self
  end
index 4662ca6bd7c2da39820a12f7d881ed078dfdbd9f..12200193e034c4d9af35a84b5df2edbb6b51c1bb 100644 (file)
@@ -52,7 +52,9 @@ class status =
   val lstatus = initial_status
   method lstatus = lstatus
   method set_lstatus v = {< lstatus = v >}
-  method set_lexicon_engine_status (o : status) = {< lstatus = o#lstatus >}
+  method set_lexicon_engine_status
+   : 'status. < lstatus: lexicon_status; .. > as 'status -> 'self
+   = fun o -> {< lstatus = o#lstatus >}
  end
 
 let dump_aliases out msg status =
index 4e404024d378dc7666de48f57f6895542b2b5b70..c526741b2a1eb69a4cc06cb449b8a0e3cda49aec 100644 (file)
@@ -36,7 +36,7 @@ class status :
  object ('self)
   method lstatus: lexicon_status
   method set_lstatus: lexicon_status -> 'self
-  method set_lexicon_engine_status: status -> 'self
+  method set_lexicon_engine_status: < lstatus: lexicon_status ; .. > -> 'self
  end
 
 val eval_command : #status as 'status -> LexiconAst.command -> 'status
index d54002d60c9c60dabf96ac50bca3808824d054f9..47c8d67c6d4251ec5a0df01c106baf678a651545 100644 (file)
@@ -28,7 +28,9 @@ class status =
   val timestamp = (time0 : timestamp)
   method timestamp = timestamp
   method set_timestamp v = {< timestamp = v >}
-  method set_library_status (o : status) = {< timestamp = o#timestamp >}
+  method set_library_status
+   : 'status. < timestamp : timestamp; .. > as 'status -> 'self
+   = fun o -> {< timestamp = o#timestamp >}
  end
 
 let time_travel status =
index 50ebf8f106f9a94916153b2ba9936135e2754701..a8b546d2e2f58bbef2b93acbd7501deb06046a21 100644 (file)
@@ -19,7 +19,7 @@ class status :
  object ('self)
   method timestamp: timestamp
   method set_timestamp: timestamp -> 'self
-  method set_library_status: status -> 'self
+  method set_library_status: <timestamp: timestamp; ..> -> 'self
  end
 
 val add_obj: #status as 'status -> NUri.uri -> NCic.obj -> 'status
index d7fef8d8f9226ba93537ccdca931bdcc23c684d0..29fe0fd540d48924dd06a8b52c319cc9497848bb 100644 (file)
@@ -31,7 +31,9 @@ class status =
   val db = empty_db
   method coerc_db = db
   method set_coerc_db v = {< db = v >}
-  method set_coercion_status (o : status) = {< db = o#coerc_db >}
+  method set_coercion_status
+   : 'status. < coerc_db : db; .. > as 'status -> 'self
+   = fun o -> {< db = o#coerc_db >}
  end
 
 let index_coercion status c src tgt arity arg =
index 0d96a74074943192b3acf2859afc00cd6edda71d..1d31d469f74dc6f32befa02f8404f823b3656ca9 100644 (file)
@@ -17,7 +17,7 @@ class status :
  object ('self)
   method coerc_db: db
   method set_coerc_db: db -> 'self
-  method set_coercion_status: status -> 'self
+  method set_coercion_status: <coerc_db: db; ..> -> 'self
  end
 
 val empty_db: db
index 6d80fe6ca46eb2d36eec7f61112dea7e94ecdeda..d166b19360fa391fd0a4febc334fe7f28bdaded5 100644 (file)
@@ -29,7 +29,9 @@ class status =
   val db = DB.empty
   method uhint_db = db
   method set_uhint_db v = {< db = v >}
-  method set_unifhint_status (o : status) = {< db = o#uhint_db >}
+  method set_unifhint_status
+   : 'status. < uhint_db : db; .. > as 'status -> 'self
+   = fun o -> {< db = o#uhint_db >}
  end
 
 let dummy = NCic.Const (NReference.reference_of_string "cic:/dummy_conv.dec");;
index fa65d527766096d4e3991be4cc4808eea8c307ac..7b8536ba77e98a937d161c4c6c88630fde4bded7 100644 (file)
@@ -17,7 +17,7 @@ class status :
  object ('self)
   method uhint_db: db
   method set_uhint_db: db -> 'self
-  method set_unifhint_status: status -> 'self
+  method set_unifhint_status: < uhint_db : db; .. > -> 'self
  end
 
 val index_hint: 
index 5ef83ec3c2c10ec578e3b0c5c603a94469d50278..bb2d357d754abc4cd55dae50d8be7e80eb9e037e 100644 (file)
 
 (* $Id: nCicRefiner.ml 9802 2009-05-25 15:39:26Z tassi $ *)
 
-class type ctstatus =
- object ('self)
-  inherit NCicUnifHint.status
-  inherit NCicCoercion.status
-  inherit NCicLibrary.status
-  method set_rstatus : ctstatus -> 'self
- end
-
-class status : ctstatus =
+class status =
  object (self)
   inherit NCicUnifHint.status
   inherit NCicCoercion.status
   inherit NCicLibrary.status
-  method set_rstatus o =
-   ((self#set_unifhint_status (o :> NCicUnifHint.status))
-         #set_coercion_status (o :> NCicCoercion.status))
-         #set_library_status  (o :> NCicLibrary.status)
+  method set_rstatus
+   : 'status.
+       < coerc_db : NCicCoercion.db;
+         uhint_db : NCicUnifHint.db;
+         timestamp: NCicLibrary.timestamp; .. > as 'status -> 'self
+   = fun o ->
+      ((self#set_unifhint_status o)#set_coercion_status o)#set_library_status o
  end
 
 type sstatus = status
@@ -44,20 +39,17 @@ module Serializer =
     status 
  end
 
-class type ctdumpable_status =
- object ('self)
-  inherit status
-  method dump: Serializer.obj list
-  method set_dump: Serializer.obj list -> 'self
-  method set_dumpable_status: ctdumpable_status -> 'self
- end
-
-class dumpable_status : ctdumpable_status =
+class dumpable_status =
  object
   inherit status
   val dump = ([] : Serializer.obj list)
   method dump = dump
   method set_dump v = {< dump = v >}
-  method set_dumpable_status o =
-   {< dump = o#dump >}#set_rstatus (o :> status)
+  method set_dumpable_status
+   : 'status.
+       < coerc_db : NCicCoercion.db;
+         uhint_db : NCicUnifHint.db;
+         timestamp: NCicLibrary.timestamp;
+         dump: Serializer.obj list; .. > as 'status -> 'self
+   = fun o -> {< dump = o#dump >}#set_rstatus o
  end
index 7fde1b74733c5be2348432daf060eb5ce29a0a31..89f62ce1d3c5d42bb79b06a3161af110972ac1b5 100644 (file)
@@ -16,7 +16,10 @@ class status :
   inherit NCicUnifHint.status
   inherit NCicCoercion.status
   inherit NCicLibrary.status
-  method set_rstatus: status -> 'self
+  method set_rstatus: 
+   < coerc_db : NCicCoercion.db;
+     uhint_db : NCicUnifHint.db;
+     timestamp: NCicLibrary.timestamp; .. > -> 'self
  end
 
 module Serializer:
@@ -30,5 +33,9 @@ class dumpable_status :
   inherit status
   method dump: Serializer.obj list
   method set_dump: Serializer.obj list -> 'self
-  method set_dumpable_status: dumpable_status -> 'self
+  method set_dumpable_status:
+   < coerc_db : NCicCoercion.db;
+     uhint_db : NCicUnifHint.db;
+     timestamp: NCicLibrary.timestamp;
+     dump: Serializer.obj list; .. > -> 'self
  end
index dab608e8ad0311e37c2c45456a257e8434cbabb0..fc0a8013cca3b09deb1b8ab9703499dc0f66d4f5 100644 (file)
@@ -179,17 +179,16 @@ let compare_statuses ~past ~present =
    (e.g. the tactic could perform a global analysis of the set of goals)
 *)
 
-let exec tac low_status g =
+let exec tac (low_status : #lowtac_status) g =
   let stack = [ [0,Open g], [], [], `NoTag ] in
   let status =
-   (new NTacStatus.status low_status#obj stack)#set_estatus
-    (low_status :> NEstatus.status)
+   (new NTacStatus.status low_status#obj stack)#set_estatus low_status
   in
   let status = tac status in
-   (low_status#set_estatus (status :> NEstatus.status))#set_obj status#obj
+   (low_status#set_estatus status)#set_obj status#obj
 ;;
 
-let distribute_tac tac status =
+let distribute_tac tac (status : #tac_status) =
   match status#stack with
   | [] -> assert false
   | (g, t, k, tag) :: s ->
@@ -226,7 +225,7 @@ let distribute_tac tac status =
       let stack =
         (zero_pos gon, t @~- gcn, k @~- gcn, tag) :: deep_close gcn s
       in
-       ((status#set_stack stack)#set_obj (sn :> lowtac_status)#obj)#set_estatus (sn :> NEstatus.status)
+       ((status#set_stack stack)#set_obj(sn:>lowtac_status)#obj)#set_estatus sn
 ;;
 
 let atomic_tac htac = distribute_tac (exec htac) ;;
@@ -248,7 +247,7 @@ let first_tac tacl status =
       | Some x -> x
 ;;
 
-let exact_tac t = distribute_tac (fun status goal ->
+let exact_tac t : 's tactic = distribute_tac (fun status goal ->
  let goalty = get_goalty status goal in
  let status, t = disambiguate status t (Some goalty) (ctx_of goalty) in
  instantiate status goal t)