{-# LANGUAGE TemplateHaskell #-}

module T10267 where

import Language.Haskell.TH
import T10267a

[d| i :: a -> a
    i = _foo

    j :: a -> a
    j x = _ |]

$(return [
   SigD (mkName "k")
        (ForallT [PlainTV (mkName "a") SpecifiedSpec]
                 []
                 (AppT (AppT ArrowT (VarT (mkName "a"))) (VarT (mkName "a"))))
 , FunD (mkName "k")
        [Clause [] (NormalB (UnboundVarE (mkName "_foo"))) []]
 ])

$(return [
   SigD (mkName "l")
        (ForallT [PlainTV (mkName "a") SpecifiedSpec]
                 []
                 (AppT (AppT ArrowT (VarT (mkName "a"))) (VarT (mkName "a"))))
 , FunD (mkName "l")
        [Clause [VarP (mkName "x")] (NormalB (UnboundVarE (mkName "_"))) []]
 ])

foo :: a -> a
foo x = $varX
