abstract Test = {

fun f : Int -> Int -> Int ;

fun g : Int -> Int ;
def g 1 = 2 ;

fun g2 : Int -> Int -> Int ;
def g2 1 x = x ;

fun g0 : Int -> Int -> Int ;
def g0 = g2 ;

fun g3 : Int -> (Int -> Int) ;
def g3 3 = g ;

fun const : Float -> String -> Float ;
def const x _ = x ;

cat Nat ;

data zero : Nat ;
     succ : Nat -> Nat ;
     err  : Nat ;
     
fun  zeroF : Nat ;
     succF : Nat -> Nat ;

fun dec : Nat -> Nat ;
def dec zero     = zero ;
    dec (succ n) = n ;
    dec n        = err ; -- for fall through checking

fun plus : Nat -> Nat -> Nat ;
def plus err zero     = err ;
    plus m   err      = err ;
    plus m   zero     = m ;
    plus m   (succ n) = plus (succ m) n ;

fun dec2 : Int -> Nat -> Nat ;
def dec2 0 zero     = err ;
    dec2 _ (succ n) = n ;

}