keera-hails-reactivelenses 0.0.0.1 → 0.0.1
raw patch · 2 files changed
+20/−16 lines, 2 files
Files
- keera-hails-reactivelenses.cabal +8/−5
- src/Data/ReactiveLens.hs +12/−11
keera-hails-reactivelenses.cabal view
@@ -7,10 +7,10 @@ -- The package version. See the Haskell package versioning policy -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for -- standards guiding when and how versions should be incremented.-Version: 0.0.0.1+Version: 0.0.1 -- A short (one-line) description of the package.-Synopsis: Haskell on Gtk rails - Lenses applied to Reactive Values+Synopsis: Reactive Haskell on Rails - Lenses applied to Reactive Values -- A longer description of the package. -- Description:@@ -43,13 +43,12 @@ -- Extra-source-files: -- Constraint on the version of Cabal needed to build this package.-Cabal-version: >=1.2-+Cabal-version: >= 1.6 Library hs-source-dirs: src/ - ghc-options: -Wall -fno-warn-unused-do-bind -O2+ ghc-options: -Wall -fno-warn-unused-do-bind -- Modules exported by the library. Exposed-modules: Data.ReactiveLens@@ -57,3 +56,7 @@ -- Packages needed in order to build this package. Build-depends: base >= 4 && < 5, lens, keera-hails-reactivevalues +source-repository head+ type: git+ location: git://github.com/keera-studios/keera-hails+ subdir: keera-hails-reactivelenses
src/Data/ReactiveLens.hs view
@@ -1,6 +1,4 @@-{-# LANGUAGE RankNTypes #-}-{-# LANGUAGE TypeSynonymInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE Rank2Types #-} module Data.ReactiveLens where import Control.Lens@@ -11,22 +9,25 @@ -> Lens' a b -> ReactiveFieldReadWrite m b reactiveFromLens (ReactiveFieldReadWrite setter getter notifier) l =- ReactiveFieldReadWrite setter' getter' notifier- where setter' v = setter.(set l v) =<< getter- getter' = fmap (view l) getter+ ReactiveFieldReadWrite setter' getter' notifier+ where setter' v = setter.(set l v) =<< getter+ getter' = fmap (view l) getter -- I'd love to write this, but it's not possible because Haskell does not -- allow partially applied type synonyms anywhere. -- instance Monad m => GFunctor (ReactiveFieldReadWrite m) Lens' where -- gmap = reactiveFromLens --- | Why use such a big function name? Well, there are very good--- reasons. One is to get back to the Lens implementors, who--- always choose names that are incredibly easy to pronounce.--- Another is because it's based on <$> and <$$>.+-- | An infix version of 'reactiveFromLense'.+--+-- DUE to a strange problem with GHC-7.10, I cannot use the following+-- equivalente definition: 'flip' 'reactiveFromLens'. (<$$$>) :: (Monad m, Functor m) => Lens' a b -> ReactiveFieldReadWrite m a -> ReactiveFieldReadWrite m b-(<$$$>) = flip reactiveFromLens+(<$$$>) l (ReactiveFieldReadWrite setter getter notifier) =+ ReactiveFieldReadWrite setter' getter' notifier+ where setter' v = setter.(set l v) =<< getter+ getter' = fmap (view l) getter -- I think this bit would need monadic lenses -- reactiveLens :: Lens' a b -> Lens' (ReactiveFieldReadWrite m a) (ReactiveFieldReadWrite m b)