fexpr   :: { UfExpr RdrName }
 fexpr   : fexpr core_arg                               { UfApp $1 $2 }
+       | fexpr ATSIGN atype                            { UfApp $1 (UfTyArg  $3) }
         | aexpr                                                { $1 }
 
 aexpr  :: { UfExpr RdrName }
                : qvar_name                                     { UfVarArg $1 }
                | qdata_name                                    { UfVarArg $1 }
                | core_lit                                      { UfLitArg $1 }
-               | ATSIGN atype                                  { UfTyArg  $2 }
 
 core_args      :: { [UfArg RdrName] }
                :                                               { [] }
 data_args      :: { [UfArg RdrName] }
                :                                               { [] }
                | core_arg data_args                            { $1 : $2 }
-
-{-             | ATSIGN atype data_args                        { UfTyArg $2 : $3 } -}
+               | ATSIGN atype data_args                        { UfTyArg $2 : $3 }
 
 core_lit       :: { Literal }
-core_lit       : INTEGER                       { MachInt $1 True }
+core_lit       : INTEGER                       { mkMachInt_safe $1 }
                | CHAR                          { MachChar $1 }
                | STRING                        { MachStr $1 }
                | STRING_LIT STRING             { NoRepStr $2 }