{-# LANGUAGE Arrows #-}

module ShouldCompile where

import Control.Arrow

h :: ArrowChoice a => Int -> a (Int,Int) Int
h x = proc (y,z) -> case compare x y of
	LT -> returnA -< x
	EQ -> returnA -< y+z
	GT -> returnA -< z+x

g :: ArrowChoice a => Int -> a (Int,Int) Int
g x = proc (y,z) -> (case compare x y of
	LT -> \ a -> returnA -< x+a
	EQ -> \ b -> returnA -< y+z+b
	GT -> \ c -> returnA -< z+x
    ) 1
