git.iko.soy/typeable/cabal2nix
on master help sign in
Binding.hs: add pretty printer
6642731Peter Simons
src/Language/Nix/Binding.hs+22−2
@@ -1,12 +1,32 @@
1{-# LANGUAGE TemplateHaskell #-}
1{-# LANGUAGE TemplateHaskell #-}
2
2
3−module Language.Nix.Binding ( Binding, localName, reference ) where
3+module Language.Nix.Binding ( Binding, binding, localName, reference ) where
4
4
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
8
9
9data Binding = Bind { _localName :: Identifier, _reference :: Path }
10data Binding = Bind { _localName :: Identifier, _reference :: Path }
10 deriving (Show, Eq, Ord)
11 deriving (Show, Eq, Ord)
11
12
12makeLenses ''Binding
13makeLenses ''Binding
14+
15+binding :: Lens' Binding (Identifier,Path)
16+binding f (Bind l r) = uncurry Bind `fmap` f (l, r)
17+
18+instance Default Binding where
19+ def = Bind def def
20+
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
29+
30+ where
31+ (i, p) = view binding b
32+ ps = view path p