File ghc-proxied.spec of Package ghc-proxied

#
# spec file for package ghc-proxied
#
# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#


%global pkg_name proxied
Name:           ghc-%{pkg_name}
Version:        0.2
Release:        0
Summary:        Make functions consume Proxy instead of undefined
License:        BSD-3-Clause
Group:          System/Libraries
Url:            https://hackage.haskell.org/package/%{pkg_name}
Source0:        https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz
BuildRequires:  ghc-Cabal-devel
# Begin cabal-rpm deps:
BuildRequires:  ghc-generic-deriving-devel
BuildRequires:  ghc-rpm-macros
BuildRequires:  ghc-tagged-devel
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
# End cabal-rpm deps

%description
'proxied' is a simple library that exports a function to convert constant
functions to ones that take a 'proxy' value in the "Data.Proxied" module.
This is useful for retrofiting typeclasses that have functions that return a
constant value for any value of a particular type (but still need to consume
some value, since one of the parameterized types must appear in a typeclass
function). Often, these functions are given 'undefined' as an argument, which
might be considered poor design.

'Proxy', however, does not carry any of the error-throwing risks of
'undefined', so it is much more preferable to take 'Proxy' as an argument to a
constant function instead of 'undefined'. Unfortunately, 'Proxy' was included
in 'base' until GHC 7.8, so many of 'base''s typeclasses still contain constant
functions that aren't amenable to passing 'Proxy'. 'proxied' addresses this
issue by providing variants of those typeclass functions that take an explicit
'proxy' value.

This library also contains the "Data.Proxyless" module, which works in the
opposite direction. That is, one can take functions which take 'Proxy' (or
'undefined') as an argument and convert them to functions which take no
arguments. This trick relies on the '-XTypeApplications' extension, so it is
only available with GHC 8.0 or later.

%package devel
Summary:        Haskell %{pkg_name} library development files
Group:          Development/Libraries/Other
Requires:       %{name} = %{version}-%{release}
Requires:       ghc-compiler = %{ghc_version}
Requires(post): ghc-compiler = %{ghc_version}
Requires(postun): ghc-compiler = %{ghc_version}

%description devel
This package provides the Haskell %{pkg_name} library development files.

%prep
%setup -q -n %{pkg_name}-%{version}


%build
%ghc_lib_build


%install
%ghc_lib_install


%post devel
%ghc_pkg_recache

%postun devel
%ghc_pkg_recache

%files -f %{name}.files
%defattr(-,root,root,-)
%doc LICENSE

%files devel -f %{name}-devel.files
%defattr(-,root,root,-)
%doc CHANGELOG.md README.md

%changelog