elm/compiler/Types/Hints.hs

27 lines
958 B
Haskell

module Types.Hints (hints) where
import Control.Arrow (first)
import qualified Data.Map as Map
import Guid
import qualified Libraries as Libs
import Parse.Library (iParse)
import Parse.Types
import qualified Types.Substitutions as Subs
import Types.Types
hints :: GuidCounter [(String, Scheme)]
hints = mapM toScheme values
where
values :: [(String, String)]
values = addPrefixes (Map.toList (Map.map Map.toList Libs.libraries))
addPrefixes :: [(String,[(String, String)])] -> [(String, String)]
addPrefixes = concatMap (\(m,vs) -> map (first (\n -> m ++ "." ++ n)) vs)
toScheme :: (String, String) -> GuidCounter (String, Scheme)
toScheme (name, tipeString) =
let err = "in docs.json parsing type: " ++ tipeString in
case iParse (fmap toType typeExpr) err tipeString of
Left err -> error (show err)
Right tipe -> do scheme <- Subs.generalize [] =<< Subs.superize name tipe
return (name, scheme)