Browse thread
[Caml-list] Turning off type-checking
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ 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 ..) http://felix.sourceforge.net Here is the output and your model encoded as Felix script. Your code generator only needs tiny tweaks to make it generate Felix. --- 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 endmatch | 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 endmatch | _ => High endmatch | False => Low endmatch in Very satisfaction_c1 | WienerSchnitzel _ => Low endmatch in Very satisfaction_c1 ; fun string_of(x:satisfaction)= match x with | Low => "Low" | High => "High" | Very ?z => "Very " + string_of z endmatch ; 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. voice:61-2-9660-0850 ------------------- 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