module Language.Haskell.Liquid.Types.Meet
( meetVarTypes ) where
import SrcLoc
import Text.PrettyPrint.HughesPJ (text, Doc)
import qualified Language.Fixpoint.Types as F
import Language.Haskell.Liquid.Types
import Language.Haskell.Liquid.Types.RefType
import Language.Haskell.Liquid.UX.Tidy
meetVarTypes :: Doc -> (SrcSpan, SpecType) -> (SrcSpan, SpecType) -> SpecType
meetVarTypes v hs lq = meetError err hsT lqT
where
(hsSp, hsT) = hs
(lqSp, lqT) = lq
err = ErrMismatch lqSp v (text "meetVarTypes") hsD lqD hsSp
hsD = F.pprint (toRSort hsT)
lqD = F.pprint (toRSort lqT)
meetError :: Error -> SpecType -> SpecType -> SpecType
meetError e t t'
| meetable t t' = t `F.meet` t'
| otherwise = panicError e