on ea77dcf help sign in
elk/src/Elm/Interface.hs
83 lines 1.4 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module Elm.Interface
3 ( Interfaces
4 , Interface(..)
5 , fromModule
6 , privatize
7 )
8 where
11import Control.Monad (liftM4)
12import Data.Binary
13import qualified Data.Map as Map
15import qualified AST.Expression.Canonical as Canonical
16import qualified AST.Module.Name as ModuleName
17import qualified AST.Type as Type
18import qualified Elm.Name as N
22-- INTERFACES
25type Interfaces =
26 Map.Map ModuleName.Canonical Interface
30-- INTERFACE
33data Interface =
34 Interface
35 { _types :: Map.Map N.Name Type.Canonical
36 , _unions :: Map.Map N.Name Canonical.Union
37 , _aliases :: Map.Map N.Name Canonical.Alias
38 , _binops :: Map.Map N.Name Canonical.Binop
39 }
43-- FROM MODULE
46fromModule :: Canonical.Module -> Interface
47fromModule (Canonical.Module _ _ _ _ unions aliases binops _) =
48 Interface
49 { _types = error "TODO types"
50 , _unions = unions
51 , _aliases = aliases
52 , _binops = binops
53 }
57-- PRIVATIZE
60privatize :: Interface -> Maybe Interface
61privatize (Interface _ unions aliases _) =
62 if Map.null unions && Map.null aliases then
63 Nothing
65 else
66 Just $ Interface
67 { _types = Map.empty
68 , _unions = unions
69 , _aliases = aliases
70 , _binops = Map.empty
71 }
75-- BINARY
78instance Binary Interface where
79 get =
80 liftM4 Interface get get get get
82 put (Interface a b c d) =
83 put a >> put b >> put c >> put d