lookupAddressEnv,
ClosureType(..),
- getClosureData,
+ getClosureData, -- :: a -> IO Closure
Closure ( tipe, infoTable, ptrs, nonPtrs ),
- getClosureType,
- isConstr,
- isIndirection,
- getInfoTablePtr,
+ getClosureType, -- :: a -> IO ClosureType
+ isConstr, -- :: ClosureType -> Bool
+ isIndirection, -- :: ClosureType -> Bool
+ getInfoTablePtr, -- :: a -> Ptr StgInfoTable
Term(..),
printTerm,
isPointed,
isFullyEvaluatedTerm,
-- unsafeDeepSeq,
+
+ sigmaType
) where
#include "HsVersions.h"
import VarEnv
import OccName
import VarSet
-import Unique
import {-#SOURCE#-} TcRnDriver ( tcRnRecoverDataCon )
import TysPrim
termType t@(Suspension {}) = mb_ty t
termType t = Just$ ty t
+isFullyEvaluatedTerm :: Term -> Bool
+isFullyEvaluatedTerm Term {subTerms=tt} = all isFullyEvaluatedTerm tt
+isFullyEvaluatedTerm Suspension {} = False
+isFullyEvaluatedTerm Prim {} = True
+
instance Outputable (Term) where
ppr = head . customPrintTerm customPrintTermBase
customPrintTermBase :: Monad m => (Int->Term-> m SDoc)->[Term->m (Maybe SDoc)]
customPrintTermBase showP =
[
- test isTupleDC (liftM (parens . cat . punctuate comma) . mapM (showP 0) . subTerms)
+ test isTupleDC (liftM (parens . hcat . punctuate comma) . mapM (showP 0) . subTerms)
, test (isDC consDataCon) (\Term{subTerms=[h,t]} -> doList h t)
, test (isDC intDataCon) (coerceShow$ \(a::Int)->a)
, test (isDC charDataCon) (coerceShow$ \(a::Char)->a)
, largeIntegerDataConName]
isTupleDC Term{dc=dc} = dc `elem` snd (unzip (elems boxedTupleArr))
isDC a_dc Term{dc=dc} = a_dc == dc
- coerceShow f Term{val=val} = return . text . show . f . unsafeCoerce# $ val
+ coerceShow f = return . text . show . f . unsafeCoerce# . val
--TODO pprinting of list terms is not lazy
doList h t = do
let elems = h : getListTerms t
1 -> last0
_ | isConsLast -> text " | " <> last0
_ -> comma <> last0
- return$ brackets (cat (punctuate comma init ++ [last]))
+ return$ brackets (hcat (punctuate comma init ++ [last]))
where Just a /= Just b = not (a `coreEqType` b)
_ /= _ = True
getListTerms t@Suspension{} = [t]
getListTerms t = pprPanic "getListTerms" (ppr t)
-isFullyEvaluatedTerm :: Term -> Bool
-isFullyEvaluatedTerm Term {subTerms=tt} = all isFullyEvaluatedTerm tt
-isFullyEvaluatedTerm Suspension {} = False
-isFullyEvaluatedTerm Prim {} = True
-
-
-----------------------------------
-- Type Reconstruction
-----------------------------------
| Nothing <- mb_ty = runTR hsc_env . go argTypeKind $ hval
| Just ty <- mb_ty = runTR hsc_env $ do
term <- go argTypeKind hval
- ty' <- instScheme ty
+ ty' <- instScheme (sigmaType ty)
addConstraint ty' (fromMaybe (error "by definition")
(termType term))
return term
,fSuspension = \ct ty v b -> fmapMMaybe zonkTcType ty >>= \ty ->
return (Suspension ct ty v b)}
+
+-- Is this defined elsewhere?
+-- Find all free tyvars and insert the appropiate ForAll.
+sigmaType ty = mkForAllTys (varSetElems$ tyVarsOfType (dropForAlls ty)) ty
+
{-
Example of Type Reconstruction
--------------------------------