Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Prelude =
- external ll_putint : int -> ()
- external ll_print_bool : bool -> ()
- external ll_print_line : () -> ()
- external ll_print_space : () -> ()
- let printInt x = ll_putint x
- let printNl = ll_print_line
- let printSpace = ll_print_space
- let printnInt x =
- printInt x
- printNl ()
- let printBool b = ll_print_bool b
- open Prelude
- type Vec = { x : int; y : int }
- type Mat2x2 = { r1 : Vec; r2 : Vec }
- class Pow 'a where
- one : () -> 'a
- mult : 'a -> 'a -> 'a
- instance Pow int where
- let one () = 1
- let mult x y = x * y
- instance Pow Vec where
- let one () = { x = 1; y = 1 }
- let mult (l : Vec) (r : Vec) =
- { l with x = l.x * r.x
- y = l.y * r.y
- }
- let rec pow x n =
- if n = 0
- then one ()
- elif n = 1
- then x
- else mult x (pow x (n - 1))
- class Print 'a where
- print : 'a -> ()
- instance Print int where
- let print x = printInt x
- instance Print Vec where
- let print (v : Vec) =
- printInt v.x
- printSpace ()
- printInt v.y
- let printN x =
- print x
- printNl ()
- let _ =
- printN (pow 2 10)
- printN (pow { x = 2; y = 2} 10)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement