arend-lang / tutorial-code

Source code & exercises in Arend's documentation
https://arend-lang.github.io/documentation/tutorial
Apache License 2.0
21 stars 9 forks source link

Give an additional example in Basics/Polymorphism #15

Open DanielRrr opened 1 year ago

DanielRrr commented 1 year ago

This part of the tutorial explains Pi-types basically. There is a basic example of Pi type \Pi (b : Bool) -> if b Nat Bool. Most of the examples in the section with Basics are supported by their counterparts in Haskell. I would give a Haskell counterpart of \Pi (b : Bool) -> if b Nat Bool as well to emphasise how dependently typed languages relief dealing with type-level stuff. It could be of help (for a Haskell part of the potential audience) in making a difference between Haskell and Arend stressing that dependent types in Arend are proper.

\Pi (b : Bool) -> if b Nat Bool could be translated via type families and the language extension call DataKinds.

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}

import Data.Kind (Type)

type family Foo (b :: Bool) :: Type where
  Foo 'True = Nat
  Foo 'False = Bool