@@ -1,12 +1,32 @@
1{-# LANGUAGE TemplateHaskell #-}
1{-# LANGUAGE TemplateHaskell #-}
3−module Language.Nix.Binding ( Binding, localName, reference ) where
3+module Language.Nix.Binding ( Binding, binding, localName, reference ) where
5−import Control.Lens
5+import Internal.Lens
6import Language.Nix.Identifier
6import Language.Nix.Identifier
7import Language.Nix.Path
7import Language.Nix.Path
8+import Internal.PrettyPrinting
9data Binding = Bind { _localName :: Identifier, _reference :: Path }
10data Binding = Bind { _localName :: Identifier, _reference :: Path }
10 deriving (Show, Eq, Ord)
11 deriving (Show, Eq, Ord)
12makeLenses ''Binding
13makeLenses ''Binding
15+binding :: Lens' Binding (Identifier,Path)
16+binding f (Bind l r) = uncurry Bind `fmap` f (l, r)
18+instance Default Binding where
21+instance Pretty Binding where
22+ pPrint b = case (init ps, last ps) of
23+ ([], i') -> if i == i'
24+ then text "inherit" <+> pPrint i' <> semi
25+ else pPrint i <+> equals <+> pPrint p <> semi
26+ (p', i') -> if i == i'
27+ then text "inherit" <+> parens (pPrint (create path p')) <+> pPrint i' <> semi
28+ else pPrint i <+> equals <+> pPrint p <> semi
31+ (i, p) = view binding b