module Language.Haskell.Liquid.Constraint.ToFixpoint ( cgInfoFInfo ) where import qualified Language.Fixpoint.Types as F import Language.Haskell.Liquid.Constraint.Types import Language.Haskell.Liquid.Types hiding ( binds ) import Language.Fixpoint.Misc ( mapSnd ) import Language.Fixpoint.Interface ( parseFInfo ) -- import Control.Applicative ((<$>)) import qualified Data.HashMap.Strict as M import Data.Monoid import Language.Haskell.Liquid.Qualifier import Language.Haskell.Liquid.RefType ( rTypeSortedReft ) cgInfoFInfo :: GhcInfo -> CGInfo -> IO (F.FInfo Cinfo) cgInfoFInfo info cgi = do let tgtFI = targetFInfo info cgi impFI <- parseFInfo $ hqFiles info return $ tgtFI <> impFI -- qs <- ghcQuals info -- return F.FI { F.cm = M.fromList $ F.addIds $ fixCs cgi -- , F.ws = fixWfs cgi -- , F.bs = binds cgi -- , F.gs = F.fromListSEnv . map mkSort $ meas spc -- , F.lits = lits cgi -- , F.kuts = kuts cgi -- , F.quals = qs } -- where -- spc = spec info -- tce = tcEmbeds spc -- mkSort = mapSnd (rTypeSortedReft tce . val) targetFInfo :: GhcInfo -> CGInfo -> F.FInfo Cinfo targetFInfo info cgi = F.FI { F.cm = M.fromList $ F.addIds $ fixCs cgi , F.ws = fixWfs cgi , F.bs = binds cgi , F.gs = F.fromListSEnv . map mkSort $ meas spc , F.lits = lits cgi , F.kuts = kuts cgi , F.quals = targetQuals info } where spc = spec info tce = tcEmbeds spc mkSort = mapSnd (rTypeSortedReft tce . val) targetQuals :: GhcInfo -> [F.Qualifier] targetQuals info = spcQs ++ genQs where spcQs = qualifiers spc genQs = specificationQualifiers n info n = maxParams $ config spc spc = spec info