Hi Peter,

The build has finished with two failures: Chart and diagrams-core.

For Chart, just changing the dependency to <4.1 instead of <3.11 helped.

For diagrams-core a bit more hackery was needed, attached is a patch to
fix the current issues.  I based this work on
b3c9ad67bcd1c915ea91ab880e61cbdc0c79b610 without investigating deeply,
just fixing the issues as appeared by type and previous changelists.

Sorry for not sending github pull requests, I hope this helps too.

Gergely

diff -urN diagrams-core-1.0.0.1/diagrams-core.cabal diagrams-core-1.0.0.1-lens4/diagrams-core.cabal
--- diagrams-core-1.0.0.1/diagrams-core.cabal	2014-02-19 23:43:47.517680460 +0100
+++ diagrams-core-1.0.0.1-lens4/diagrams-core.cabal	2014-02-19 23:31:04.253190837 +0100
@@ -43,7 +43,7 @@
                        newtype >= 0.2 && < 0.3,
                        monoid-extras >= 0.3 && < 0.4,
                        dual-tree >= 0.2 && < 0.3,
-                       lens >= 3.8 && < 4
+                       lens >= 4.0 && < 4.1
 
   hs-source-dirs:      src
 
diff -urN diagrams-core-1.0.0.1/src/Diagrams/Core/Envelope.hs diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Envelope.hs
--- diagrams-core-1.0.0.1/src/Diagrams/Core/Envelope.hs	2014-02-19 23:43:47.517680460 +0100
+++ diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Envelope.hs	2014-02-19 23:34:47.218522858 +0100
@@ -43,7 +43,7 @@
        ) where
 
 import           Control.Applicative     ((<$>))
-import           Control.Lens (Wrapped(..), iso, view, over, mapped, unwrapped)
+import           Control.Lens (Wrapped(..), iso, view, over, mapped, _Unwrapped', _Wrapping', op)
 import qualified Data.Map                as M
 import           Data.Maybe              (fromMaybe)
 import           Data.Semigroup
@@ -96,18 +96,15 @@
 --   <http://byorgey.wordpress.com/2009/10/28/collecting-attributes/#comment-2030>.  See also Brent Yorgey, /Monoids: Theme and Variations/, published in the 2012 Haskell Symposium: <http://www.cis.upenn.edu/~byorgey/pub/monoid-pearl.pdf>; video: <http://www.youtube.com/watch?v=X-8NCkD2vOw>.
 newtype Envelope v = Envelope (Option (v -> Max (Scalar v)))
 
-instance (Scalar v ~ s, Scalar v' ~ s', s ~ s')
-                                        => Wrapped
-                                        (Option (v -> Max s))
-                                        (Option (v' -> Max s'))
-                                        (Envelope v) (Envelope v')
-         where wrapped = iso Envelope (\(Envelope e) -> e)
+instance Wrapped (Envelope v) where
+    type Unwrapped (Envelope v) = Option (v -> Max (Scalar v))
+    _Wrapped' = iso (\(Envelope e) -> e) Envelope
 
 appEnvelope :: Envelope v -> Maybe (v -> Scalar v)
 appEnvelope (Envelope (Option e)) = (getMax .) <$> e
 
 onEnvelope :: ((v -> Scalar v) -> (v -> Scalar v)) -> Envelope v -> Envelope v
-onEnvelope t = over (unwrapped . mapped) ((Max .) . t . (getMax .))
+onEnvelope t = over (_Wrapping' Envelope . mapped) ((Max .) . t . (getMax .))
 
 mkEnvelope :: (v -> Scalar v) -> Envelope v
 mkEnvelope = Envelope . Option . Just . (Max .)
@@ -188,7 +185,7 @@
   getEnvelope p = moveTo p . mkEnvelope $ const zeroV
 
 instance Enveloped t => Enveloped (TransInv t) where
-  getEnvelope = getEnvelope . view unwrapped
+  getEnvelope = getEnvelope . op TransInv
 
 instance (Enveloped a, Enveloped b, V a ~ V b) => Enveloped (a,b) where
   getEnvelope (x,y) = getEnvelope x <> getEnvelope y
diff -urN diagrams-core-1.0.0.1/src/Diagrams/Core/Names.hs diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Names.hs
--- diagrams-core-1.0.0.1/src/Diagrams/Core/Names.hs	2014-02-19 23:43:47.517680460 +0100
+++ diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Names.hs	2014-02-19 23:31:04.257190862 +0100
@@ -5,6 +5,7 @@
 {-# LANGUAGE MultiParamTypeClasses      #-}
 {-# LANGUAGE OverlappingInstances       #-}
 {-# LANGUAGE TemplateHaskell            #-}
+{-# LANGUAGE TypeFamilies               #-}
 {-# LANGUAGE TypeSynonymInstances       #-}
 -----------------------------------------------------------------------------
 -- |
@@ -31,7 +32,7 @@
 
        ) where
 
-import           Control.Lens            (over, unwrapped, Wrapped(..), iso)
+import           Control.Lens            (over, _Unwrapped', Wrapped(..), iso, _Unwrapping')
 import           Data.List               (intercalate)
 import qualified Data.Map                as M
 import           Data.Semigroup
@@ -92,8 +93,9 @@
 newtype Name = Name [AName]
   deriving (Eq, Ord, Semigroup, Monoid, Typeable)
 
-instance Wrapped [AName] [AName] Name Name
-  where wrapped = iso Name (\(Name ans) -> ans)
+instance Wrapped Name where
+    type Unwrapped Name = [AName]
+    _Wrapped' = iso (\(Name ans) -> ans) Name
 
 instance Show Name where
   show (Name ns) = intercalate " .> " $ map show ns
@@ -118,7 +120,7 @@
   (|>) = (.>)
 
 instance Qualifiable a => Qualifiable (TransInv a) where
-  (|>) n = over unwrapped (n |>)
+  (|>) n = over (_Unwrapping' TransInv) (n |>)
 
 instance (Qualifiable a, Qualifiable b) => Qualifiable (a,b) where
   n |> (a,b) = (n |> a, n |> b)
diff -urN diagrams-core-1.0.0.1/src/Diagrams/Core/Query.hs diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Query.hs
--- diagrams-core-1.0.0.1/src/Diagrams/Core/Query.hs	2014-02-19 23:43:47.517680460 +0100
+++ diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Query.hs	2014-02-19 23:31:04.257190862 +0100
@@ -45,8 +45,9 @@
 newtype Query v m = Query { runQuery :: Point v -> m }
   deriving (Functor, Applicative, Semigroup, Monoid)
 
-instance Wrapped (Point v -> m) (Point v' -> m') (Query v m) (Query v' m')
-    where wrapped = iso Query runQuery
+instance Wrapped (Query v m) where
+    type Unwrapped (Query v m) = (Point v -> m)
+    _Wrapped' = iso runQuery Query
 
 type instance V (Query v m) = v
 
diff -urN diagrams-core-1.0.0.1/src/Diagrams/Core/Style.hs diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Style.hs
--- diagrams-core-1.0.0.1/src/Diagrams/Core/Style.hs	2014-02-19 23:43:47.517680460 +0100
+++ diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Style.hs	2014-02-19 23:31:04.257190862 +0100
@@ -140,12 +140,9 @@
   -- The String keys are serialized TypeRep values, corresponding to
   -- the type of the stored attribute.
 
-instance Wrapped
-         (M.Map String (Attribute v))
-         (M.Map String (Attribute v'))
-         (Style v)
-         (Style v')
-     where wrapped = iso Style (\(Style m) -> m)
+instance Wrapped (Style v) where
+    type Unwrapped (Style v) = M.Map String (Attribute v)
+    _Wrapped' = iso (\(Style m) -> m) Style
 
 type instance V (Style v) = v
 
diff -urN diagrams-core-1.0.0.1/src/Diagrams/Core/Trace.hs diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Trace.hs
--- diagrams-core-1.0.0.1/src/Diagrams/Core/Trace.hs	2014-02-19 23:43:47.513680437 +0100
+++ diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Trace.hs	2014-02-19 23:42:37.313276414 +0100
@@ -80,12 +80,9 @@
 
 newtype Trace v = Trace { appTrace :: Point v -> v -> PosInf (Scalar v) }
 
-instance (Scalar v ~ s, Scalar v' ~ s', s ~ s') =>
-         Wrapped
-         (Point v -> v -> PosInf s)
-         (Point v' -> v' -> PosInf s')
-         (Trace v) (Trace v')
-         where wrapped = iso Trace appTrace
+instance Wrapped (Trace v) where
+    type Unwrapped (Trace v) = Point v -> v -> PosInf (Scalar v)
+    _Wrapped' = iso appTrace Trace
 
 mkTrace :: (Point v -> v -> PosInf (Scalar v)) -> Trace v
 mkTrace = Trace
@@ -103,7 +100,7 @@
 type instance V (Trace v) = v
 
 instance (VectorSpace v) => HasOrigin (Trace v) where
-  moveOriginTo (P u) = unwrapping Trace %~ \f p -> f (p .+^ u)
+  moveOriginTo (P u) = (_Wrapping' Trace) %~ \f p -> f (p .+^ u)
 
 instance Show (Trace v) where
   show _ = "<trace>"
@@ -113,7 +110,7 @@
 ------------------------------------------------------------
 
 instance HasLinearMap v => Transformable (Trace v) where
-  transform t = unwrapped %~ \f p v -> f (papply (inv t) p) (apply (inv t) v)
+  transform t = _Wrapped' %~ \f p v -> f (papply (inv t) p) (apply (inv t) v)
 
 ------------------------------------------------------------
 --  Traced class  ------------------------------------------
@@ -139,7 +136,7 @@
   getTrace = const mempty
 
 instance Traced t => Traced (TransInv t) where
-  getTrace = getTrace . view unwrapped
+  getTrace = getTrace . op TransInv
 
 instance (Traced a, Traced b, V a ~ V b) => Traced (a,b) where
   getTrace (x,y) = getTrace x <> getTrace y
@@ -161,7 +158,7 @@
 --   given object in the given direction, or @Nothing@ if there is no
 --   intersection.
 traceV :: Traced a => Point (V a) -> V a -> a -> Maybe (V a)
-traceV p v a = case ((getTrace a)^.unwrapping Trace) p v of
+traceV p v a = case op Trace (getTrace a) p v of
                  Finite s -> Just (s *^ v)
                  Infinity -> Nothing
 
diff -urN diagrams-core-1.0.0.1/src/Diagrams/Core/Transform.hs diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Transform.hs
--- diagrams-core-1.0.0.1/src/Diagrams/Core/Transform.hs	2014-02-19 23:43:47.517680460 +0100
+++ diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Transform.hs	2014-02-19 23:31:04.257190862 +0100
@@ -6,6 +6,7 @@
            , MultiParamTypeClasses
            , GeneralizedNewtypeDeriving
            , TemplateHaskell
+           , TypeFamilies
            , TypeSynonymInstances
            , ScopedTypeVariables
   #-}
@@ -275,8 +276,9 @@
 newtype TransInv t = TransInv t
   deriving (Eq, Ord, Show, Semigroup, Monoid)
 
-instance Wrapped t t' (TransInv t) (TransInv t')
-         where wrapped = iso TransInv (\(TransInv t) -> t)
+instance Wrapped (TransInv t) where
+    type Unwrapped (TransInv t) = t
+    _Wrapped' = iso (\(TransInv t) -> t) TransInv
 
 type instance V (TransInv t) = V t
 
diff -urN diagrams-core-1.0.0.1/src/Diagrams/Core/Types.hs diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Types.hs
--- diagrams-core-1.0.0.1/src/Diagrams/Core/Types.hs	2014-02-19 23:43:47.517680460 +0100
+++ diagrams-core-1.0.0.1-lens4/src/Diagrams/Core/Types.hs	2014-02-19 23:39:19.508138060 +0100
@@ -118,8 +118,8 @@
        ) where
 
 import           Control.Arrow             (first, second, (***))
-import           Control.Lens              (Lens', Wrapped (..), iso, lens,
-                                            over, unwrapped, view, (^.))
+import           Control.Lens              (Lens', Wrapped (..), Rewrapped(..), iso, lens,
+                                            over, _Unwrapped', view, (^.), _Wrapping, _Wrapped, _Wrapped')
 import           Control.Monad             (mplus)
 import           Data.AffineSpace          ((.-.))
 import           Data.List                 (isSuffixOf)
@@ -239,11 +239,12 @@
   = QD (D.DUALTree (DownAnnots v) (UpAnnots b v m) () (QDiaLeaf b v m))
   deriving (Typeable)
 
-instance Wrapped
-         (D.DUALTree (DownAnnots v) (UpAnnots b v m) () (QDiaLeaf b v m))
-         (D.DUALTree (DownAnnots v') (UpAnnots b' v' m') () (QDiaLeaf b' v' m'))
-         (QDiagram b v m) (QDiagram b' v' m')
-         where wrapped = iso QD (\(QD d) -> d)
+instance Wrapped (QDiagram b v m) where
+    type Unwrapped (QDiagram b v m) =
+        D.DUALTree (DownAnnots v) (UpAnnots b v m) () (QDiaLeaf b v m)
+    _Wrapped' = iso (\(QD d) -> d) QD
+
+instance Rewrapped (QDiagram b v m) (QDiagram b v m')
 
 type instance V (QDiagram b v m) = v
 
@@ -266,7 +267,7 @@
       => QDiagram b v m -> [(Prim b v, (Split (Transformation v), Style v))]
 prims = concatMap processLeaf
       . D.flatten
-      . view unwrapped
+      . view _Wrapped'
   where
     processLeaf (PrimLeaf p, (trSty,_)) = [(p, untangle . option mempty id $ trSty)]
     processLeaf (DelayedLeaf k, d)      = prims (k d)
@@ -280,14 +281,14 @@
 envelope :: forall b v m. (OrderedField (Scalar v), InnerSpace v
                           , HasLinearMap v, Monoid' m)
          => Lens' (QDiagram b v m) (Envelope v)
-envelope = lens (unDelete . getU' . view unwrapped) (flip setEnvelope)
+envelope = lens (unDelete . getU' . view _Wrapped) (flip setEnvelope)
 
 -- | Replace the envelope of a diagram.
 setEnvelope :: forall b v m. (OrderedField (Scalar v), InnerSpace v
                              , HasLinearMap v, Monoid' m)
           => Envelope v -> QDiagram b v m -> QDiagram b v m
 setEnvelope e =
-    over unwrapped ( D.applyUpre (inj . toDeletable $ e)
+    over _Wrapped' ( D.applyUpre (inj . toDeletable $ e)
                 . D.applyUpre (inj (deleteL :: Deletable (Envelope v)))
                 . D.applyUpost (inj (deleteR :: Deletable (Envelope v)))
               )
@@ -295,13 +296,13 @@
 -- | Get the trace of a diagram.
 trace :: (InnerSpace v, HasLinearMap v, OrderedField (Scalar v), Semigroup m) =>
          Lens' (QDiagram b v m) (Trace v)
-trace = lens (unDelete . getU' . view unwrapped) (flip setTrace)
+trace = lens (unDelete . getU' . view _Wrapped') (flip setTrace)
 
 -- | Replace the trace of a diagram.
 setTrace :: forall b v m. (OrderedField (Scalar v), InnerSpace v
                           , HasLinearMap v, Semigroup m)
          => Trace v -> QDiagram b v m -> QDiagram b v m
-setTrace t = over unwrapped ( D.applyUpre (inj . toDeletable $ t)
+setTrace t = over _Wrapped' ( D.applyUpre (inj . toDeletable $ t)
                          . D.applyUpre (inj (deleteL :: Deletable (Trace v)))
                          . D.applyUpost (inj (deleteR :: Deletable (Trace v)))
                        )
@@ -310,22 +311,22 @@
 --   subdiagrams) of a diagram.
 subMap :: (HasLinearMap v, InnerSpace v, Semigroup m, OrderedField (Scalar v)) =>
           Lens' (QDiagram b v m) (SubMap b v m)
-subMap = lens (unDelete . getU' . view unwrapped) (flip setMap) where
+subMap = lens (unDelete . getU' . view _Wrapped') (flip setMap) where
   setMap :: (HasLinearMap v, InnerSpace v, Semigroup m, OrderedField (Scalar v)) =>
             SubMap b v m -> QDiagram b v m -> QDiagram b v m
-  setMap m = over unwrapped ( D.applyUpre . inj . toDeletable $ m)
+  setMap m = over _Wrapped' ( D.applyUpre . inj . toDeletable $ m)
 
 -- | Get a list of names of subdiagrams and their locations.
 names :: (HasLinearMap v, InnerSpace v, Semigroup m, OrderedField (Scalar v))
          => QDiagram b v m -> [(Name, [Point v])]
-names = (map . second . map) location . M.assocs . view (subMap . unwrapped)
+names = (map . second . map) location . M.assocs . view (subMap . _Wrapped')
 
 -- | Attach an atomic name to a certain subdiagram, computed from the
 --   given diagram.
 nameSub :: ( IsName n
            , HasLinearMap v, InnerSpace v, OrderedField (Scalar v), Semigroup m)
         => (QDiagram b v m -> Subdiagram b v m) -> n -> QDiagram b v m -> QDiagram b v m
-nameSub s n d = over unwrapped (D.applyUpre . inj . toDeletable $ fromNames [(n,s d)]) d
+nameSub s n d = over _Wrapped' (D.applyUpre . inj . toDeletable $ fromNames [(n,s d)]) d
 
 -- | Lookup the most recent diagram associated with (some
 --   qualification of) the given name.
@@ -374,14 +375,14 @@
                           , OrderedField (Scalar v), Semigroup m
                           )
          => QDiagram b v m -> QDiagram b v m
-localize = over unwrapped ( D.applyUpre  (inj (deleteL :: Deletable (SubMap b v m)))
+localize = over _Wrapped' ( D.applyUpre  (inj (deleteL :: Deletable (SubMap b v m)))
                    . D.applyUpost (inj (deleteR :: Deletable (SubMap b v m)))
                    )
 
 
 -- | Get the query function associated with a diagram.
 query :: Monoid m => QDiagram b v m -> Query v m
-query = getU' . view unwrapped
+query = getU' . view _Wrapped'
 
 -- | Sample a diagram's query function at a given point.
 sample :: Monoid m => QDiagram b v m -> Point v -> m
@@ -460,7 +461,7 @@
 ---- Functor
 
 instance Functor (QDiagram b v) where
-  fmap f = over unwrapped
+  fmap f = over (_Wrapping QD)
            ( (D.mapU . second . second)
              ( (first . fmap . fmap . fmap)   f
              . (second . first . fmap . fmap) f
@@ -489,7 +490,7 @@
 
 instance (HasLinearMap v, InnerSpace v, OrderedField (Scalar v), Semigroup m)
       => HasStyle (QDiagram b v m) where
-  applyStyle = over unwrapped . D.applyD . inj
+  applyStyle = over _Wrapped' . D.applyD . inj
              . (inR :: Style v -> Split (Transformation v) :+: Style v)
 
 -- | By default, diagram attributes are not affected by
@@ -511,7 +512,7 @@
 freeze :: forall v b m. (HasLinearMap v, InnerSpace v
                         , OrderedField (Scalar v), Semigroup m)
        => QDiagram b v m -> QDiagram b v m
-freeze = over unwrapped . D.applyD . inj
+freeze = over _Wrapped' . D.applyD . inj
        . (inL :: Split (Transformation v) -> Split (Transformation v) :+: Style v)
        $ split
 
@@ -549,7 +550,7 @@
 --   components appropriately.
 instance (HasLinearMap v, OrderedField (Scalar v), InnerSpace v, Semigroup m)
       => Transformable (QDiagram b v m) where
-  transform = over unwrapped . D.applyD . transfToAnnot
+  transform = over _Wrapped' . D.applyD . transfToAnnot
 
 ---- Qualifiable
 
@@ -557,7 +558,7 @@
 --   now be referred to using the qualification prefix.
 instance (HasLinearMap v, InnerSpace v, OrderedField (Scalar v), Semigroup m)
       => Qualifiable (QDiagram b v m) where
-  (|>) = over unwrapped . D.applyD . inj . toName
+  (|>) = over _Wrapped' . D.applyD . inj . toName
 
 
 ------------------------------------------------------------
@@ -626,7 +627,7 @@
           , Semigroup m
           )
        => Subdiagram b v m -> QDiagram b v m
-getSub (Subdiagram d a) = over unwrapped (D.applyD a) d
+getSub (Subdiagram d a) = over _Wrapped' (D.applyD a) d
 
 -- | Extract the \"raw\" content of a subdiagram, by throwing away the
 --   context.
@@ -642,11 +643,11 @@
 newtype SubMap b v m = SubMap (M.Map Name [Subdiagram b v m])
   -- See Note [SubMap Set vs list]
 
-instance Wrapped
-         (M.Map Name [Subdiagram b v m])
-         (M.Map Name [Subdiagram b v m'])
-         (SubMap b v m) (SubMap b v m')
-         where wrapped = iso SubMap (\(SubMap m) -> m)
+instance Wrapped (SubMap b v m) where
+    type Unwrapped (SubMap b v m) = M.Map Name [Subdiagram b v m]
+    _Wrapped' = iso (\(SubMap m) -> m) SubMap
+
+instance Rewrapped (SubMap b v m) (SubMap b v m')
 
 -- ~~~~ [SubMap Set vs list]
 -- In some sense it would be nicer to use
@@ -656,7 +657,7 @@
 type instance V (SubMap b v m) = v
 
 instance Functor (SubMap b v) where
-  fmap = over unwrapped . fmap . map . fmap
+  fmap = over _Wrapped . fmap . map . fmap
 
 instance Semigroup (SubMap b v m) where
   SubMap s1 <> SubMap s2 = SubMap $ M.unionWith (++) s1 s2
@@ -672,11 +673,11 @@
 
 instance (OrderedField (Scalar v), InnerSpace v, HasLinearMap v)
       => HasOrigin (SubMap b v m) where
-  moveOriginTo = over unwrapped . moveOriginTo
+  moveOriginTo = over _Wrapped' . moveOriginTo
 
 instance (InnerSpace v, Floating (Scalar v), HasLinearMap v)
   => Transformable (SubMap b v m) where
-  transform = over unwrapped . transform
+  transform = over _Wrapped' . transform
 
 -- | 'SubMap's are qualifiable: if @ns@ is a 'SubMap', then @a |>
 --   ns@ is the same 'SubMap' except with every name qualified by
@@ -691,7 +692,7 @@
 
 -- | Add a name/diagram association to a submap.
 rememberAs :: IsName a => a -> QDiagram b v m -> SubMap b v m -> SubMap b v m
-rememberAs n b = over unwrapped $ M.insertWith (++) (toName n) [mkSubdiagram b]
+rememberAs n b = over _Wrapped' $ M.insertWith (++) (toName n) [mkSubdiagram b]
 
 -- | A name acts on a name map by qualifying every name in it.
 instance Action Name (SubMap b v m) where

On Wed, 19 Feb 2014 16:45:45 +0100, Peter Simons <[email protected]> writes:

> Hi Gergely,
>
>  > I wanted to ask for your transition plan/timeframe regarding this
>  > change? Do you plan to switch over to lens4 as default sometime and
>  > provide overrides for the not forward compatible packages?
>
> I'm running test builds at [1] right now. If those builds succeed (or
> fail in a way that's easy to fix), then I'll push an update ASAP that
> switches the default version to lens 4.x. Is that alright with everyone?
>
>  > Should we provide patches in nixpkgs where needed to upgrade
>  > everything to lens4 until they're fixed upstream?
>
> Well, if you are aware of a package that won't compile with lens 4.x,
> then yes, please add an appropriate patch. It would be great if we could
> convert all of Nixpkgs to lens 4.x at the same time!
>
>  > As always: thanks for maintaining Haskell in nixpkgs, great job!
>
> Thank you. :-)
>
> Take care,
> Peter
>
> [1] http://hydra.cryp.to/jobset/nixpkgs/haskell-updates
_______________________________________________
nix-dev mailing list
[email protected]
http://lists.science.uu.nl/mailman/listinfo/nix-dev

Reply via email to