File ghc-ersatz.spec of Package ghc-ersatz

#
# spec file for package ghc-ersatz
#
# Copyright (c) 2017 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 ersatz
%bcond_with tests
Name:           ghc-%{pkg_name}
Version:        0.4
Release:        0
Summary:        A monad for expressing SAT or QSAT problems using observable sharing
License:        BSD-3-Clause
Group:          Development/Languages/Other
Url:            https://hackage.haskell.org/package/%{pkg_name}
Source0:        https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz
BuildRequires:  chrpath
BuildRequires:  ghc-Cabal-devel
BuildRequires:  ghc-array-devel
BuildRequires:  ghc-attoparsec-devel
BuildRequires:  ghc-bytestring-devel
BuildRequires:  ghc-cabal-doctest-devel
BuildRequires:  ghc-containers-devel
BuildRequires:  ghc-data-default-devel
BuildRequires:  ghc-lens-devel
BuildRequires:  ghc-mtl-devel
BuildRequires:  ghc-parsec-devel
BuildRequires:  ghc-process-devel
BuildRequires:  ghc-rpm-macros
BuildRequires:  ghc-temporary-devel
BuildRequires:  ghc-transformers-devel
BuildRequires:  ghc-unordered-containers-devel
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
%if %{with tests}
BuildRequires:  ghc-directory-devel
BuildRequires:  ghc-doctest-devel
BuildRequires:  ghc-filepath-devel
%endif

%description
A monad for expressing SAT or QSAT problems using observable sharing.

For example, we can express a full-adder with:

> full_adder :: Bit -> Bit -> Bit -> (Bit, Bit) > full_adder a b cin = (s2, c1
|| c2) > where (s1,c1) = half_adder a b > (s2,c2) = half_adder s1 cin

> half_adder :: Bit -> Bit -> (Bit, Bit) > half_adder a b = (a `xor` b, a && b)

/Longer Examples/

Included are a couple of examples included with the distribution.
Neither are as fast as a dedicated solver for their respective domains, but
they showcase how you can solve real world problems involving 10s or 100s of
thousands of variables and constraints with `ersatz`.

'ersatz-sudoku'

> % time ersatz-sudoku > Problem: > ┌───────┬───────┬───────┐ > │ 5 3 │ 7 │ │ >
│ 6 │ 1 9 5 │ │ > │ 9 8 │ │ 6 │ > ├───────┼───────┼───────┤ > │ 8 │ 6 │ 3 │ > │
4 │ 8 3 │ 1 │ > │ 7 │ 2 │ 6 │ > ├───────┼───────┼───────┤ > │ 6 │ │ 2 8 │ > │ │
4 1 9 │ 5 │ > │ │ 8 │ 7 9 │ > └───────┴───────┴───────┘ > Solution: >
┌───────┬───────┬───────┐ > │ 5 3 4 │ 6 7 8 │ 9 1 2 │ > │ 6 7 2 │ 1 9 5 │ 3 4 8
│ > │ 1 9 8 │ 3 4 2 │ 5 6 7 │ > ├───────┼───────┼───────┤ > │ 8 5 9 │ 7 6 1 │ 4
2 3 │ > │ 4 2 6 │ 8 5 3 │ 7 9 1 │ > │ 7 1 3 │ 9 2 4 │ 8 5 6 │ >
├───────┼───────┼───────┤ > │ 9 6 1 │ 5 3 7 │ 2 8 4 │ > │ 2 8 7 │ 4 1 9 │ 6 3 5
│ > │ 3 4 5 │ 2 8 6 │ 1 7 9 │ > └───────┴───────┴───────┘ > ersatz-sudoku 1,13s
user 0,04s system 99% cpu 1,179 total

'ersatz-regexp-grid'

This solves the "regular crossword puzzle"
(<https://github.com/ekmett/ersatz/raw/master/notes/grid.pdf grid.pdf>) from
the 2013 MIT mystery hunt.

> % time ersatz-regexp-grid

"SPOILER"

> ersatz-regexp-grid 2,45s user 0,05s system 99% cpu 2,502 total.

%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
%ghc_fix_rpath %{pkg_name}-%{version}

%check
%cabal_test

%post devel
%ghc_pkg_recache

%postun devel
%ghc_pkg_recache

%files -f %{name}.files
%defattr(-,root,root,-)
%doc LICENSE
%{_bindir}/ersatz-regexp-grid
%{_bindir}/ersatz-sudoku
%dir %{_datadir}/%{pkg_name}-%{version}
%dir %{_datadir}/%{pkg_name}-%{version}/data
%dir %{_datadir}/%{pkg_name}-%{version}/data/dimacs
%dir %{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf
%dir %{_datadir}/%{pkg_name}-%{version}/data/dimacs/blocksworld
%dir %{_datadir}/%{pkg_name}-%{version}/data/dimacs/bmc
%dir %{_datadir}/%{pkg_name}-%{version}/data/dimacs/logistics
%dir %{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity
%dir %{_datadir}/%{pkg_name}-%{version}/data/dimacs/phole
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/bf0432-007.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/bf1355-075.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/bf1355-638.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/bf2670-001.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/descr.html
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/ssa0432-003.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/ssa2670-130.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/ssa2670-141.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/ssa6288-047.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/ssa7552-038.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/ssa7552-158.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/ssa7552-159.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bf/ssa7552-160.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/blocksworld/anomaly.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/blocksworld/bw_large.a.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/blocksworld/bw_large.b.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/blocksworld/bw_large.c.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/blocksworld/descr.html
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/blocksworld/huge.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/blocksworld/medium.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bmc/bmc-ibm-1.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bmc/bmc-ibm-2.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bmc/bmc-ibm-3.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bmc/bmc-ibm-4.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bmc/bmc-ibm-5.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/bmc/bmc-ibm-7.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/logistics/descr.html
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/logistics/logistics.a.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/logistics/logistics.b.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/logistics/logistics.c.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/logistics/logistics.d.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/descr
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par16-1-c.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par16-1.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par16-2-c.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par16-2.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par16-3-c.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par16-3.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par16-4-c.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par16-4.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par16-5-c.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par16-5.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par8-1-c.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par8-1.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par8-2-c.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par8-2.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par8-3-c.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par8-3.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par8-4-c.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par8-4.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par8-5-c.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/parity/par8-5.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/phole/descr.html
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/phole/hole6.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/phole/hole7.cnf
%{_datadir}/%{pkg_name}-%{version}/data/dimacs/phole/hole8.cnf

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

%changelog
openSUSE Build Service is sponsored by