module Main where

import Prelude

import Effect (Effect)
import Effect.Console (log)


main :: Effect Unit
main = log "hello world"

---------- Existentials
type ShowConstraint a = Show a => a

type Exists :: forall k. (k -> Type) -> Type
type Exists c = forall r. (forall a. c a -> r) -> r

type Showable = Exists ShowConstraint

mkShowable :: forall a. Show a => a -> Showable
mkShowable inner continue = continue inner

demo1 :: Showable
demo1 = mkShowable 1

demo2:: Showable
demo2 = mkShowable "a"

demo3:: Showable
demo3 = mkShowable true