commit:     4e200d25d801924de0fccbe8e0994d8482e7b291
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Sun Sep 11 09:47:10 2016 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Sun Sep 11 10:01:31 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4e200d25

dev-haskell/data-accessor: access library to record fields, a depend of 
dev-haskell/idiii

Package-Manager: portage-2.3.0

 dev-haskell/data-accessor/Manifest                 |  1 +
 .../data-accessor/data-accessor-0.2.2.7.ebuild     | 26 ++++++++
 dev-haskell/data-accessor/metadata.xml             | 70 ++++++++++++++++++++++
 3 files changed, 97 insertions(+)

diff --git a/dev-haskell/data-accessor/Manifest 
b/dev-haskell/data-accessor/Manifest
new file mode 100644
index 00000000..b9ef247
--- /dev/null
+++ b/dev-haskell/data-accessor/Manifest
@@ -0,0 +1 @@
+DIST data-accessor-0.2.2.7.tar.gz 9670 SHA256 
3465227ad5f81059a885d354e2f3c108d550287580e6939e18350fa65e78c2ed SHA512 
42f78d5be738e83e2bc64a2f38bc70748ecb741433916c4e527355f5e808a844e43b14607cfff149a5951f557c73a947469c878340738244e3778f475ccd021d
 WHIRLPOOL 
5d9cb0eeda4d89b6e5b5e22820431b20faa9736cf539705afdd3bdc9accadec1138ff8acd33d00389755f1b803b79cfd240b13037cafdb27576478084e813ec1

diff --git a/dev-haskell/data-accessor/data-accessor-0.2.2.7.ebuild 
b/dev-haskell/data-accessor/data-accessor-0.2.2.7.ebuild
new file mode 100644
index 00000000..cf00a33
--- /dev/null
+++ b/dev-haskell/data-accessor/data-accessor-0.2.2.7.ebuild
@@ -0,0 +1,26 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+# ebuild generated by hackport 0.4.6.9999
+
+CABAL_FEATURES="lib profile haddock hoogle hscolour"
+inherit haskell-cabal
+
+DESCRIPTION="Utilities for accessing and manipulating fields of records"
+HOMEPAGE="http://www.haskell.org/haskellwiki/Record_access";
+SRC_URI="mirror://hackage/packages/archive/${PN}/${PV}/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0/${PV}"
+KEYWORDS="~amd64 ~x86"
+IUSE=""
+
+RDEPEND=">=dev-haskell/transformers-0.2:=[profile?] 
<dev-haskell/transformers-0.6:=[profile?]
+       >=dev-lang/ghc-7.4.1:=
+"
+DEPEND="${RDEPEND}
+       >=dev-haskell/cabal-1.6
+"

diff --git a/dev-haskell/data-accessor/metadata.xml 
b/dev-haskell/data-accessor/metadata.xml
new file mode 100644
index 00000000..1962ea1
--- /dev/null
+++ b/dev-haskell/data-accessor/metadata.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd";>
+<pkgmetadata>
+       <maintainer type="project">
+               <email>[email protected]</email>
+               <name>Gentoo Haskell</name>
+       </maintainer>
+       <longdescription>
+               In Haskell 98 the name of a record field
+               is automatically also the name of a function which gets the 
value
+               of the according field.
+               E.g. if we have
+               
+               data Pair a b = Pair
+               first :: a, second :: b
+               
+               then
+               
+               &gt; first  :: Pair a b -&gt; a
+               &gt; second :: Pair a b -&gt; b
+               
+               However for setting or modifying a field value
+               we need to use some syntactic sugar, which is often clumsy.
+               
+               modifyFirst :: (a -&gt; a) -&gt; (Pair a b -&gt; Pair a b)
+               modifyFirst f r\@(Pair
+               first=a
+               ) = r
+               first = f a
+               
+               With this package you can define record field accessors
+               which allow setting, getting and modifying values easily.
+               The package clearly demonstrates the power of the functional 
approach:
+               You can combine accessors of a record and sub-records,
+               to make the access look like the fields of the sub-record 
belong to the main record.
+               
+               Example:
+               
+               &gt; *Data.Accessor.Example&gt; (first^:second^=10) 
(('b',7),"hallo")
+               &gt; (('b',10),"hallo")
+               
+               You can easily manipulate record fields in a 
'Control.Monad.State.State' monad,
+               you can easily code 'Show' instances that use the Accessor 
syntax
+               and you can parse binary streams into records.
+               See @Data.Accessor.Example@ for demonstration of all features.
+               
+               It would be great if in revised Haskell versions the names of 
record fields
+               are automatically 'Data.Accessor.Accessor's
+               rather than plain @get@ functions.
+               For now, the package @data-accessor-template@ provides Template 
Haskell functions
+               for automated generation of 'Data.Acesssor.Accessor's.
+               See also the other @data-accessor@ packages
+               that provide an Accessor interface to other data types.
+               The package @enumset@ provides accessors to bit-packed records.
+               
+               For similar packages see @lenses@ and @fclabel@.
+               A related concept are editors
+               
&lt;http://conal.net/blog/posts/semantic-editor-combinators/&gt;.
+               Editors only consist of a modify method
+               (and @modify@ applied to a 'const' function is a @set@ 
function).
+               This way, they can modify all function values of a function at 
once,
+               whereas an accessor can only change a single function value,
+               say, it can change @f 0 = 1@ to @f 0 = 2@.
+               This way, editors can even change the type of a record or a 
function.
+               An Arrow instance can be defined for editors,
+               but for accessors only a Category instance is possible ('(.)' 
method).
+               The reason is the @arr@ method of the @Arrow@ class,
+               that conflicts with the two-way nature (set and get) of 
accessors.
+       </longdescription>
+</pkgmetadata>

Reply via email to