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 qualified Data.HashMap.Strict            as M

import Language.Haskell.Liquid.Qualifier
import Language.Haskell.Liquid.RefType          ( rTypeSortedReft )


cgInfoFInfo :: GhcInfo -> CGInfo -> F.FInfo Cinfo
cgInfoFInfo 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 = (qualifiers $ spc) ++ (specificationQualifiers (maxParams (config spc)) info)
         }
   where  
    spc        = spec info
    tce        = tcEmbeds spc 
    mkSort     = mapSnd (rTypeSortedReft tce . val)