Opaque Argument Type with type system

Opaque Argument Type with type system

C114c127f13522da92cb03e5d14946ca?s=128

Takuma Shimizu

April 12, 2019
Tweet

Transcript

  1. 4.

    ͷ

  2. 7.

    Opaque Argument Type // generics func useAnimal<A: Animal>(_ animal: A)

    { animal.foo() } // Opaque Argument Type func useAnimal(_ animal: some Animal) { animal.foo() }
  3. 8.

    Opaque Argument Type // generics func useAnimal<A: Animal>(_ animal: A)

    { animal.foo() } // Opaque Argument Type func useAnimal(_ animal: some Animal) { animal.foo() } 㲈 ಉ౳
  4. 9.

    Opaque Argument Type // generics func useAnimal<A: Animal>(_ animal: A)

    { animal.foo() } // Opaque Argument Type func useAnimal(_ animal: some Animal) { animal.foo() } 㲈 ಉ౳ ˡͳΜͰʁ
  5. 13.

    func useAnimal<A: Animal>(_ animal: A) { animal.foo() } ∀ A.

    (func(A: Animal) -> ()) 䁭 શশྔԽܕ func(∃ A. A: Animal) -> () 䁭 ଘࡏྔԽܕ func useAnimal(_ animal: some Animal) { animal.foo() }
  6. 14.

    (∀ x. (P(x) → Q)) 䁭 શশྔԽܕ ((∃ x. P(x))

    → Q) 䁭 ଘࡏྔԽܕ ∀ A. (func(A: Animal) -> ()) func(∃ A. A: Animal) -> ()
  7. 15.

    (∀ x. (P(x) → Q)) ((∃ x. P(x)) → Q)

    㱻 㱻 ͜ͷه߸͸ʮಉ஋ʯͷҙຯͰ͢
  8. 16.

    • func(∃ S. S: Foo) -> T ͕͋Δͱ͖ • ∀

    S. (func(S: Foo) -> T) ΛߏஙͰ͖Δ • ٯ΋·ͨવΓ    
 • func(∃ S. S: Foo) -> T ͕͋Δͱ͖ • ∀ S. (func(S: Foo) -> T) ΛߏஙͰ͖Δ • ٯ΋·ͨવΓ w ௚؍ओٛ࿦ཧʹ͓͍ͯ੒Γཱͭ w ΧϦʔʹϋϫʔυಉܕରԠ w ໋୊ʹܕ GPSNVMBFBTUZQFT  w ͜ΕʹΑ໋ͬͯ୊ͱܕͷؒʹ͸௚઀తͳରԠؔ܎͕͋Δ͜ͱ͕ ɹ໋୊ (∀ x. (P(x) → Q)) 㱻((∃ x. P(x)) → Q)
  9. 22.

    Opaque Argument Type w HFOFSJDT શশྔԽ ͱΑ͘ࣅͨߏ଄Λ࣋ͭ w Ϣχόʔαϧ ීวɾશশ

    ʹ͸ͳΒͳ͍ w ಛఆͷ࣮ࡏ ଘࡏ ͢ΔܕΛඞͣ࣋ͭ ଘࡏྔԽ ࿩͠଍Γͳ͍ʜ