packages feed

idris-0.9.17: test/reg058/implicits2.idr

import Data.Vect

impTy : Bool -> Type
impTy True = Int
impTy False = {n : Nat} -> Vect n Int -> Vect n Int

wibble : impTy False
wibble [] = [] 
wibble (x :: xs) = x * 2 :: wibble xs

wobble : (b : Bool) -> impTy b
wobble True = 42
wobble False = wibble

foo : Vect 4 Int
foo = wobble False [1,2,3,4]

bar : Int
bar = wobble True