+ The way to do this this in OCaml is less straightforward. You have to use parameterized modules. See our [[Ramble on Monads and modules|/topics/week8_monads_and_modules]] for discussion.
+
+* So here's a summary of how some different type declarations look in Haskell:
+
+ data Pretty1 a b = Lovely a | Cute b ClothingModule.ButtonType
+ newtype Pretty2 a b = Pretty2 a b Int
+ type Pretty3 a b = (a, b)
+
+ and in OCaml:
+
+ type ('a,'b) pretty1 = Lovely of 'a | Cute of 'b * ClothingModule.ButtonType
+ type ('a,'b) pretty2 = Pretty2 of 'a * 'b * int
+ type ('a,'b) pretty3 = 'a * 'b
+
+ There's also:
+
+ -- Haskell
+ newtype Pretty4 a b = Pretty4 { unPretty a }
+
+ (* OCaml *)
+ type ('a,'b) pretty4 = Pretty4 of 'a
+ (* or *)
+ type ('a,'b) pretty4 = { pretty4: 'a }
+
+ We will discuss record types further below.