-- |
-- Module      : Minigent.TC
-- Copyright   : (c) Data61 2018-2019
--                   Commonwealth Science and Research Organisation (CSIRO)
--                   ABN 41 687 119 230
-- License     : BSD3
--
-- The top level type checking/inference module.
--
-- May be used qualified or unqualified.
module Minigent.TC where

import Minigent.Fresh

import Minigent.TC.ConstraintGen
import Minigent.TC.Solver

import Minigent.Syntax
import Minigent.Syntax.Utils
import Minigent.Syntax.Utils.Rewrite(untilFixedPoint)
import Minigent.Environment
import Control.Monad.State
import Control.Monad.Reader
import qualified Data.Map as M
import Debug.Trace

import Minigent.Syntax.PrettyPrint

-- | Run type checking/inference on the given definitions under the given 'GlobalEnvironments'.
--
--   Returns either a list of unsolved constraints (if inference fails) or a new definition
--   with type signatures added to each subexpression and type applications expanded explicitly.
tc :: GlobalEnvironments
   -> [(FunName, (VarName, Expr))]
   -> FreshT VarName IO [Either (FunName, [Constraint]) (FunName,(VarName,Expr))]
tc envs = mapM check
  where
    check (f, (x, e)) = do
      (axs, e', c) <- runCG (cgFunction f x e) mempty envs

      (cs',ss) <- runSolver (solve axs [c])
      let subst = normaliseType (untilFixedPoint (foldMap substAssign ss))
      if null cs'
        then return $ Right (f, (x, exprTypes subst e'))
        else return $ Left (f, cs')
