Interface.hs 834 B

1234567891011121314151617181920212223242526
  1. module Gidl.Interface
  2. ( module Gidl.Interface.AST
  3. , lookupInterface
  4. , insertInterface
  5. , interfaceParents
  6. , interfaceMethods
  7. ) where
  8. import Gidl.Interface.AST
  9. lookupInterface :: InterfaceName -> InterfaceEnv -> Maybe Interface
  10. lookupInterface iname (InterfaceEnv ie) = lookup iname ie
  11. insertInterface :: Interface -> InterfaceEnv -> InterfaceEnv
  12. insertInterface i e@(InterfaceEnv ie) = case lookupInterface iname e of
  13. Nothing -> InterfaceEnv ((iname,i):ie)
  14. Just _ -> error ("insertInterface invariant broken: interface " ++ iname ++ "already exists")
  15. where (Interface iname _ _) = i
  16. interfaceParents :: Interface -> [Interface]
  17. interfaceParents (Interface _ parents _) = parents
  18. interfaceMethods :: Interface -> [(MethodName, Method)]
  19. interfaceMethods (Interface _ ps ms) = ms ++ concatMap interfaceMethods ps