Advertisement
Guest User

Untitled

a guest
Jun 26th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.25 KB | None | 0 0
  1. module Prelude =
  2.     external ll_putint      : int -> ()
  3.     external ll_print_bool  : bool -> ()
  4.     external ll_print_line  : ()  -> ()
  5.     external ll_print_space : ()  -> ()
  6.  
  7.     let printInt x = ll_putint x
  8.     let printNl = ll_print_line
  9.     let printSpace = ll_print_space
  10.     let printnInt x =
  11.         printInt x
  12.         printNl ()
  13.  
  14.     let printBool b = ll_print_bool b
  15.  
  16. open Prelude
  17.  
  18. type Vec = { x : int; y : int }
  19. type Mat2x2 = { r1 : Vec; r2 : Vec }
  20.  
  21. class Pow 'a where
  22.     one  : () -> 'a
  23.     mult : 'a -> 'a -> 'a
  24.  
  25. instance Pow int where
  26.     let one () = 1
  27.     let mult x y = x * y
  28.  
  29. instance Pow Vec where
  30.     let one () = { x = 1; y = 1 }
  31.     let mult (l : Vec) (r : Vec) =
  32.         { l with x = l.x * r.x
  33.                  y = l.y * r.y
  34.         }
  35.  
  36. let rec pow x n =
  37.     if n = 0
  38.     then one ()
  39.     elif n = 1
  40.     then x
  41.     else mult x (pow x (n - 1))
  42.  
  43. class Print 'a where
  44.     print : 'a -> ()
  45.  
  46. instance Print int where
  47.     let print x = printInt x
  48.  
  49. instance Print Vec where
  50.     let print (v : Vec) =
  51.         printInt v.x
  52.         printSpace ()
  53.         printInt v.y
  54.  
  55. let printN x =
  56.     print x
  57.     printNl ()
  58.  
  59. let _ =
  60.     printN (pow 2 10)
  61.     printN (pow { x = 2; y = 2} 10)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement