46 lines
1.0 KiB
Haskell
46 lines
1.0 KiB
Haskell
module Nix.Type.Assumption
|
|
( Assumption(..)
|
|
, empty
|
|
, lookup
|
|
, remove
|
|
, extend
|
|
, keys
|
|
, merge
|
|
, mergeAssumptions
|
|
, singleton
|
|
)
|
|
where
|
|
|
|
import Prelude hiding ( lookup )
|
|
|
|
import Nix.Type.Type
|
|
|
|
import Data.Foldable
|
|
|
|
newtype Assumption = Assumption { assumptions :: [(Name, Type)] }
|
|
deriving (Eq, Show)
|
|
|
|
empty :: Assumption
|
|
empty = Assumption []
|
|
|
|
extend :: Assumption -> (Name, Type) -> Assumption
|
|
extend (Assumption a) (x, s) = Assumption ((x, s) : a)
|
|
|
|
remove :: Assumption -> Name -> Assumption
|
|
remove (Assumption a) var = Assumption (filter (\(n, _) -> n /= var) a)
|
|
|
|
lookup :: Name -> Assumption -> [Type]
|
|
lookup key (Assumption a) = map snd (filter (\(n, _) -> n == key) a)
|
|
|
|
merge :: Assumption -> Assumption -> Assumption
|
|
merge (Assumption a) (Assumption b) = Assumption (a ++ b)
|
|
|
|
mergeAssumptions :: [Assumption] -> Assumption
|
|
mergeAssumptions = foldl' merge empty
|
|
|
|
singleton :: Name -> Type -> Assumption
|
|
singleton x y = Assumption [(x, y)]
|
|
|
|
keys :: Assumption -> [Name]
|
|
keys (Assumption a) = map fst a
|