Inferring Datatypes Ningning Xie HIW 2019.08.23 data Maybe a = - - PowerPoint PPT Presentation

inferring datatypes
SMART_READER_LITE
LIVE PREVIEW

Inferring Datatypes Ningning Xie HIW 2019.08.23 data Maybe a = - - PowerPoint PPT Presentation

Inferring Datatypes Ningning Xie HIW 2019.08.23 data Maybe a = Nothing | Just a data List a = Nil | Cons a ( List a) data Either a b = Left a | Right b Wh Which da datatype ype de declarations ns sh should be e ac accepted? Wh What ki


slide-1
SLIDE 1

Inferring Datatypes

Ningning Xie HIW 2019.08.23

slide-2
SLIDE 2

data Maybe a = Nothing | Just a data List a = Nil | Cons a (List a) data Either a b = Left a | Right b

slide-3
SLIDE 3

Wh Which da datatype ype de declarations ns sh should be e ac accepted?

Wh What ki kinds do do accep accepted ed da datatypes pes ha have? e?

slide-4
SLIDE 4
slide-5
SLIDE 5

Haskell98

data AppInt f = Mk (f Int) AppInt :: ?

slide-6
SLIDE 6

Haskell98

data AppInt f = Mk (f Int) AppInt :: ? AppInt :: ∗ → ∗ → ∗

slide-7
SLIDE 7

data Q1 a = MkQ1 data Q2 = MkQ2 (Q1 Maybe)

slide-8
SLIDE 8

data Q1 a = MkQ1 data Q2 = MkQ2 (Q1 Maybe)

  • - Q1 ∷ ∗ → ∗
slide-9
SLIDE 9

data Q1 a = MkQ1 data Q2 = MkQ2 (Q1 Maybe)

  • - Q1 ∷ ∗ → ∗
  • - Rejected!
slide-10
SLIDE 10

data Q1 a = MkQ1 Q2 data Q2 = MkQ2 (Q1 Maybe)

slide-11
SLIDE 11

data Q1 a = MkQ1 Q2 data Q2 = MkQ2 (Q1 Maybe)

  • - Q1 ∷ (∗ → ∗) → ∗
slide-12
SLIDE 12

data Q1 a = MkQ1 Q2 data Q2 = MkQ2 (Q1 Maybe)

  • - Q1 ∷ (∗ → ∗) → ∗
  • - Accepted!
slide-13
SLIDE 13

Modern Haskell

slide-14
SLIDE 14

{-# LANGUAGE ExplicitForAll , PolyKinds , ExistentialQuantification , TypeInType , TypeApplications #-}

slide-15
SLIDE 15

data X :: forall a (b::*->*). a b -> * data Y :: forall (c :: Maybe Bool). X c -> *

slide-16
SLIDE 16

data X :: forall a (b::*->*). a b -> * data Y :: forall (c :: Maybe Bool). X c -> *

slide-17
SLIDE 17

data X :: forall a (b::*->*). a b -> * data Y :: forall (c :: Maybe Bool). X c -> * a :: (∗ → ∗) → ∗ Kind mismatch!

slide-18
SLIDE 18

data Q :: forall (a :: f b) (c :: k) . f c -> *

slide-19
SLIDE 19

data Q :: forall (a :: f b) (c :: k) . f c -> *

slide-20
SLIDE 20

data Q :: forall (a :: f b) (c :: k) . f c -> * data Q :: forall (f::?) (b::?) (k::?) forall (a :: f b) (c :: k) . f c -> *

slide-21
SLIDE 21

data Q :: forall (a :: f b) (c :: k) . f c -> * c :: k k :: *

slide-22
SLIDE 22

data Q :: forall (a :: f b) (c :: k) . f c -> * c :: k k :: * f :: k -> *

slide-23
SLIDE 23

data Q :: forall (a :: f b) (c :: k) . f c -> * c :: k k :: * f :: k -> * b :: k

slide-24
SLIDE 24

data Q :: forall (a :: f b) (c :: k) . f c -> * k :: * f :: k -> * b :: k

slide-25
SLIDE 25

data Q :: forall (a :: f b) (c :: k) . f c -> * data Q :: forall (f::?) (b::?) (k::?) forall (a :: f b) (c :: k) . f c -> *

slide-26
SLIDE 26

data Q :: forall (a :: f b) (c :: k) . f c -> * data Q :: forall (k::?) (f::?) (b::?) forall (a :: f b) (c :: k) . f c -> *

slide-27
SLIDE 27

data Q :: forall (a :: f b) (c :: k) . f c -> * data Q :: forall (k::*) (f::k->*) (b::k) forall (a :: f b) (c :: k) . f c -> *

slide-28
SLIDE 28

Inferring Datatypes

slide-29
SLIDE 29

Inferring Datatypes

  • If you are a type theorist…
slide-30
SLIDE 30

Inferring Datatypes

  • If you are a GHC hacker/developer…
  • Further language extensions
  • How our work relates to GHC