CS 476 Programming Language Design William Mansky OCaml

  • Slides: 14
Download presentation
CS 476 – Programming Language Design William Mansky

CS 476 – Programming Language Design William Mansky

OCaml: Variants • Next step up from sum types: variants (“hi”, 123) : (string

OCaml: Variants • Next step up from sum types: variants (“hi”, 123) : (string * int) { text = “hi”; num = 123; … } : { text : string; num : int; … } 1

OCaml: Variants • Next step up from sum types: variants inl “hi” : string

OCaml: Variants • Next step up from sum types: variants inl “hi” : string + int inr 123 : string + int Text “hi” : [Text : string; Num : int; …] • Can have any number of choices, and each one is named • Choice (“field”) names are exactly OCaml’s constructors! 2

OCaml: Variants L : : = … | <Ident> L | (match L with

OCaml: Variants L : : = … | <Ident> L | (match L with | <Ident> <ident> -> L |… | <Ident> <ident> -> L) T : : = … | [ <Ident> of T; …; <Ident> of T ] 3

OCaml: Variants 4

OCaml: Variants 4

OCaml: Variants 5

OCaml: Variants 5

OCaml: Variants • 6

OCaml: Variants • 6

OCaml: Variants • 7

OCaml: Variants • 7

OCaml: Variants L : : = … | <Ident> L | (match L with

OCaml: Variants L : : = … | <Ident> L | (match L with | <Ident> <ident> -> L |… | <Ident> <ident> -> L) T : : = … | [ <Ident> of T; …; <Ident> of T ] 8

OCaml: Inductive Datatypes L : : = … | <Ident> L | (match L

OCaml: Inductive Datatypes L : : = … | <Ident> L | (match L with | <Ident> <ident> -> L |… | <Ident> <ident> -> L) TD : : = type <ident> = T T : : = … | [ <Ident> of T; …; <Ident> of T ] | <ident> P : : = TD; ; … TD; ; L 9

OCaml: Inductive Datatypes L : : = … | <Ident> L | (match L

OCaml: Inductive Datatypes L : : = … | <Ident> L | (match L with | <Ident> <ident> -> L |… | <Ident> <ident> -> L) TD : : = (type <ident> = <Ident> of T | … | <Ident> of T) T : : = … | <ident> P : : = TD; ; … TD; ; L 10

OCaml: Inductive Datatypes • 11

OCaml: Inductive Datatypes • 11

OCaml: Inductive Datatypes • 12

OCaml: Inductive Datatypes • 12

OCaml: Inductive Datatypes • 13

OCaml: Inductive Datatypes • 13