27 lines
958 B
Haskell
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)
|