English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
[Caml-list] Turning off type-checking
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2002-05-15 (22:22)
From: John Max Skaller <skaller@o...>
Subject: Re: [Caml-list] Turning off type-checking
Jacques Garrigue wrote:

>>It would be really nice if there were some command-line flag for the
>>OCaml-compilers which turns off every check that is not required under the
>>assumption that the given OCaml-code is (type) correct as is guaranteed in
>>my case. Would this be easily possible? What else could I do to reduce the
>>amount of work the OCaml-compiler has to do? Insert Obj.magic everywhere?
>One thing you might want to try is to write your own interpreter for
>your subset of ocaml. 
Heh. Or just use Felix! Felix doesn't do
Hindley-Milner type inference, so the problem should go away.
It does a restricted form of type deduction (bottom up only ..)


Here is the output and your model encoded as Felix script.
Your code generator only needs tiny tweaks to make it generate

--- run the script below ------
[skaller@pelican] ~/links/flx>./bin/flx --test ttt
TESTMODE: running felix from current directory
Very Very High

--- ttt.flx ------------------------
#include <std.flx>
union  satisfaction = | Low | High | Very of satisfaction;
union  diameter = | Large | Small;
union  sort = | Mozzarella | Gorgonzola;
union topping = | Cheese of sort | Tomatoes | Mushrooms;
union  spiced = | False | True;
union  meal =
    | WienerSchnitzel of diameter
    | Pizza of (diameter * spiced * topping)
    | TapirSoup of spiced;

fun model (meal_d1:meal):satisfaction =
  let satisfaction_c1 =
    match meal_d1 with
    | TapirSoup ?spiced_d1 =>
      match spiced_d1 with
        | True => Low
        | False => High
    | Pizza (_, ?spiced_d1, ?topping_d1) =>
        let satisfaction_c1 =
          match spiced_d1 with
          | True =>
          match topping_d1 with
        | Cheese ?sort_d1 =>
          match sort_d1 with
          | Gorgonzola => Low
          | Mozzarella => High
          | _ => High
          | False => Low
        Very satisfaction_c1
    | WienerSchnitzel _ => Low
  Very satisfaction_c1

fun string_of(x:satisfaction)=
  match x with
  | Low => "Low"
  | High => "High"
  | Very ?z => "Very " + string_of z

val MyMeal = Pizza (Large,True, Cheese Mozzarella);
print (string_of (model MyMeal)); endl;

John Max Skaller, mailto:skaller@ozemail.com.au
snail:10/1 Toxteth Rd, Glebe, NSW 2037, Australia.

To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners