git.iko.soy/typeable/cabal2nix
on master help sign in
Binding.hs: add pretty printer
commit6642731b59f72720da32148997c12b9c2557b815 authorPeter Simons <simons@cryp.to> dateFri 21 Aug 2015, 17:33 (11 years ago) parentace1ee4
1 file changed+22−2
src/Language/Nix/Binding.hs+22−2
src/Language/Nix/Binding.hs+22−2
@@ -1,12 +1,32 @@
11{-# LANGUAGE TemplateHaskell #-}
22
3−module Language.Nix.Binding ( Binding, localName, reference ) where
3+module Language.Nix.Binding ( Binding, binding, localName, reference ) where
44
5−import Control.Lens
5+import Internal.Lens
66import Language.Nix.Identifier
77import Language.Nix.Path
8+import Internal.PrettyPrinting
89
910data Binding = Bind { _localName :: Identifier, _reference :: Path }
1011 deriving (Show, Eq, Ord)
1112
1213makeLenses ''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