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