tfp_to_int :: Type.Type -> TypeSession Int
tfp_to_int ty = do
hscenv <- MonadState.get tsHscEnv
- let norm_ty = normalise_tfp_int hscenv ty
+ let norm_ty = normalize_tfp_int hscenv ty
case Type.splitTyConApp_maybe norm_ty of
Just (tycon, args) -> do
let name = Name.getOccString (TyCon.tyConName tycon)
tfp_to_int' ty = do
lens <- MonadState.get tsTfpInts
hscenv <- MonadState.get tsHscEnv
- let norm_ty = normalise_tfp_int hscenv ty
+ let norm_ty = normalize_tfp_int hscenv ty
let existing_len = Map.lookup (OrdType norm_ty) lens
case existing_len of
Just len -> return len
libdir = DynFlags.topDir dynflags
dynflags = HscTypes.hsc_dflags env
-normalise_tfp_int :: HscTypes.HscEnv -> Type.Type -> Type.Type
-normalise_tfp_int env ty =
+normalize_tfp_int :: HscTypes.HscEnv -> Type.Type -> Type.Type
+normalize_tfp_int env ty =
System.IO.Unsafe.unsafePerformIO $
- normaliseType env ty
+ normalizeType env ty
--- | Get the width of a SizedWord type
--- sized_word_len :: HscTypes.HscEnv -> Type.Type -> Int
--- sized_word_len env ty = eval_tfp_int env (sized_word_len_ty ty)
-
sized_word_len_ty :: Type.Type -> Type.Type
sized_word_len_ty ty = len
where
Nothing -> error $ "\nCoreTools.sized_word_len_ty: Not a sized word type: " ++ (pprString ty)
[len] = args
--- | Get the width of a SizedInt type
--- sized_int_len :: HscTypes.HscEnv -> Type.Type -> Int
--- sized_int_len env ty = eval_tfp_int env (sized_int_len_ty ty)
-
sized_int_len_ty :: Type.Type -> Type.Type
sized_int_len_ty ty = len
where
Nothing -> error $ "\nCoreTools.sized_int_len_ty: Not a sized int type: " ++ (pprString ty)
[len] = args
--- | Get the upperbound of a RangedWord type
--- ranged_word_bound :: HscTypes.HscEnv -> Type.Type -> Int
--- ranged_word_bound env ty = eval_tfp_int env (ranged_word_bound_ty ty)
-
ranged_word_bound_ty :: Type.Type -> Type.Type
ranged_word_bound_ty ty = len
where
Nothing -> error $ "\nCoreTools.ranged_word_bound_ty: Not a sized word type: " ++ (pprString ty)
[len] = args
--- | Evaluate a core Type representing type level int from the TypeLevel
--- library to a real int.
--- eval_type_level_int :: Type.Type -> Int
--- eval_type_level_int ty =
--- unsafeRunGhc $ do
--- -- Automatically import modules for any fully qualified identifiers
--- setDynFlag DynFlags.Opt_ImplicitImportQualified
---
--- let to_int_name = mkRdrName "Data.TypeLevel.Num.Sets" "toInt"
--- let to_int = SrcLoc.noLoc $ HsExpr.HsVar to_int_name
--- let undef = hsTypedUndef $ coreToHsType ty
--- let app = HsExpr.HsApp (to_int) (undef)
---
--- core <- toCore [] app
--- execCore core
-
--- | Get the length of a FSVec type
--- tfvec_len :: HscTypes.HscEnv -> Type.Type -> Int
--- tfvec_len env ty = eval_tfp_int env (tfvec_len_ty ty)
-
tfvec_len_ty :: Type.Type -> Type.Type
tfvec_len_ty ty = len
where
let binders = take i wildbndrs ++ [sel_bndr] ++ drop (i+1) wildbndrs
return $ CoreSyn.Case scrut scrut_bndr scrut_ty [(CoreSyn.DataAlt datacon, binders, CoreSyn.Var sel_bndr)]
dcs -> error $ "CoreTools.mkSelCase: Scrutinee type must have exactly one datacon. Extracting element " ++ (show i) ++ " from '" ++ pprString scrut ++ "' Datacons: " ++ (show dcs) ++ " Type: " ++ (pprString scrut_ty)
- Nothing -> error $ "CoreTools.mkSelCase: Creating extractor case, but scrutinee has no tycon? Extracting element " ++ (show i) ++ " from '" ++ pprString scrut ++ "'"
+ Nothing -> error $ "CoreTools.mkSelCase: Creating extractor case, but scrutinee has no tycon? Extracting element " ++ (show i) ++ " from '" ++ pprString scrut ++ "'" ++ " Type: " ++ (pprString scrut_ty)