{-# LANGUAGE CPP #-} {-# LANGUAGE TemplateHaskell #-} module Example where import Control.Monad import PartialTypeSigs import Language.Haskell.TH #if __GLASGOW_HASKELL__ > 707 sigs [| ["f1" :: a -> b -> (a, Int), "f1" :: b -> a -> (Char, a) ] |] f1 x y | False = $(unionSigs [| f1 x y |]) f1 x y = undefined -- (x,y) #endif sigs [| do let f2 = undefined Just ( f2 :: a -> b -> (a, Int), f2 :: c -> d -> (Char, d) ) |] f2 x y | False = $(unionSigs [| f2 x y |]) f2 x y = undefined -- (x,y)