Archives / Snippets / Projets

( print : utiliser dump : 'a -> string de la librairie OCaml Batteries Included https://github.com/ocaml-batteries-team/batteries-included/blob/master/src/batPervasives.ml )

Il faudra surement modifier ~/.ocamlinit pour démarrer Batteries à chaque fois.

$ ocaml
let print x = Printf.printf "%s" (dump x); print_newline ();;

Exemples

# let print x = Printf.printf "%s" (dump x); print_newline ();;
val print : 'a -> unit = <fun>
# print 2;;
2
- : unit = ()
# print "ok";;
"ok"
- : unit = ()
# print [1; 2];;
[1; 2]
- : unit = ()
# print (3, 4);;
(3, 4)
- : unit = ()
# print 2 3 4;;
Error: This function has type 'a -> unit
       It is applied to too many arguments; maybe you forgot a `;'.
# 

Types récursifs

On pourrait vouloir écrire une version qui prend un nombre arbitraire d'arguments : a priori il faut accepter les types récursifs, c'est dangereux Stackoverflow Inria

$ ocaml -rectypes
# let rec print x = Printf.printf "%s" (dump x); print_newline (); print;;
val print : 'b -> 'a as 'a = <fun>
# print 2 3 4;;
2
3
4
- : int -> 'a as 'a = <fun>