packages feed

subhask-0.1.1.0: subhask.cabal

name:                subhask
version:             0.1.1.0
synopsis:            Type safe interface for programming in subcategories of Hask
homepage:            http://github.com/mikeizbicki/subhask
license:             BSD3
license-file:        LICENSE
author:              Mike Izbicki
maintainer:          mike@izbicki.me
category:            Control, Categories, Algebra
build-type:          Simple
extra-source-files:  README.md
cabal-version:       >=1.10

description:
    SubHask is a radical rewrite of the Haskell <https://www.haskell.org/onlinereport/standard-prelude.htm Prelude>.
    The goal is to make numerical computing in Haskell fun and fast.
    The main idea is to use a type safe interface for programming in arbitrary subcategories of <https://wiki.haskell.org/Hask Hask>.
    For example, the category <http://ncatlab.org/nlab/show/Vect Vect> of linear functions is a subcategory of Hask, and SubHask exploits this fact to give a nice interface for linear algebra.
    To achieve this goal, almost every class hierarchy is redefined to be more general.

    I recommend reading the <http://github.com/mikeizbicki/subhask/blob/master/README.md README> file and the <http://github.com/mikeizbicki/subhask/blob/master/examples examples> before looking at the documetation here.

source-repository head
    type: git
    location: http://github.com/mikeizbicki/subhask

--------------------------------------------------------------------------------

library
    exposed-modules:
        SubHask

        SubHask.Algebra
        SubHask.Algebra.Array
        SubHask.Algebra.Container
        SubHask.Algebra.Group
        SubHask.Algebra.Logic
        SubHask.Algebra.Metric
        SubHask.Algebra.Ord
        SubHask.Algebra.Parallel
        SubHask.Algebra.Ring
        SubHask.Algebra.Vector
        SubHask.Algebra.Vector.FFI

        SubHask.Category
        SubHask.Category.Finite
        SubHask.Category.Product
        SubHask.Category.Polynomial
        SubHask.Category.Slice
        SubHask.Category.Trans.Bijective
        SubHask.Category.Trans.Constrained
        SubHask.Category.Trans.Derivative
        SubHask.Category.Trans.Monotonic

        SubHask.Compatibility.Base
        SubHask.Compatibility.BloomFilter
        SubHask.Compatibility.ByteString
        SubHask.Compatibility.Cassava
        SubHask.Compatibility.Containers
        SubHask.Compatibility.HyperLogLog

        SubHask.Monad
        SubHask.Mutable
        SubHask.SubType

        SubHask.TemplateHaskell.Base
        SubHask.TemplateHaskell.Deriving
        SubHask.TemplateHaskell.Mutable
        SubHask.TemplateHaskell.Test

    other-modules:
        SubHask.Internal.Prelude
        SubHask.TemplateHaskell.Common

    default-extensions:
        TypeFamilies,
        ConstraintKinds,
        DataKinds,
        GADTs,
        MultiParamTypeClasses,
        FlexibleInstances,
        FlexibleContexts,
        TypeOperators,
        RankNTypes,
        InstanceSigs,
        ScopedTypeVariables,
        UndecidableInstances,
        PolyKinds,
        StandaloneDeriving,
        GeneralizedNewtypeDeriving,
        TemplateHaskell,
        BangPatterns,
        FunctionalDependencies,
        TupleSections,
        MultiWayIf,

        AutoDeriveTypeable,
        DeriveGeneric,
        RebindableSyntax
--         OverloadedLists

    hs-source-dirs:
        src

    c-sources:
        cbits/Lebesgue.c

    cc-options:
--         -O3
        -ffast-math
        -msse3

    ghc-options:
--         -O2
--         -O
        -funbox-strict-fields

    build-depends:
        -- NOTE:
        -- We specify the *exact* versions of all non-base libraries to ensure that we get reproducible builds.
        -- This helps prevent performance regressions.
        -- The downside of exact version dependencies is that the user probably doesn't have these versions installed.
        -- This can result in significantly longer build times and build conflicts.
        -- But since subhask is designed as an alternative to base, this is an acceptable tradeoff.

        -- haskell language
        base                        >= 4.8 && <4.9,
        ghc-prim                    == 0.4.0.0,
        template-haskell            == 2.10.0.0,

        -- special functionality
        parallel                    == 3.2.0.6,
        deepseq                     == 1.4.1.1,
        primitive                   == 0.6,
        monad-primitive             == 0.1,
        QuickCheck                  == 2.8.1,

        -- math
        erf                         == 2.0.0.0,
        gamma                       == 0.9.0.2,
        hmatrix                     == 0.16.1.5,

        -- compatibility control flow
        mtl                         == 2.2.1,
        MonadRandom                 == 0.4,

        -- compatibility data structures
        bytestring                  == 0.10.6.0,
        bloomfilter                 == 2.0.1.0,
        cassava                     == 0.4.3.1,
        containers                  == 0.5.6.2,
        vector                      == 0.10.12.3,
        array                       == 0.5.1.0,
        hyperloglog                 == 0.3.4,

        -- required for hyperloglog compatibility
        semigroups                  == 0.16.2.2,
        bytes                       == 0.15.0.1,
        approximate                 == 0.2.2.1,
        lens                        == 4.12.3

    default-language:
        Haskell2010

--------------------------------------------------------------------------------

Test-Suite TestSuite-Unoptimized
    default-language:   Haskell2010
    type:               exitcode-stdio-1.0
    hs-source-dirs:     test
    main-is:            TestSuite.hs

    ghc-options:
        -O0

    build-depends:
        subhask,
        test-framework-quickcheck2  >= 0.3.0,
        test-framework              >= 0.8.0

-- FIXME:
-- The test below takes a long time to compile.
-- The slow builds are causing travis tests to fail.
--
-- Test-Suite TestSuite-Optimized
--     default-language:   Haskell2010
--     type:               exitcode-stdio-1.0
--     hs-source-dirs:     test
--     main-is:            TestSuite.hs
--
--     build-depends:
--         subhask,
--         test-framework-quickcheck2  >= 0.3.0,
--         test-framework              >= 0.8.0
--
--     ghc-options:
--         -O2
--         -fllvm

--------------------

Test-Suite Example0001
    default-language:   Haskell2010
    type:               exitcode-stdio-1.0
    hs-source-dirs:     examples
    main-is:            example0001-polynomials.lhs
    build-depends:      subhask, base

Test-Suite Example0002
    default-language:   Haskell2010
    type:               exitcode-stdio-1.0
    hs-source-dirs:     examples
    main-is:            example0002-monad-instances-for-set.lhs
    build-depends:      subhask, base

Test-Suite Example0003
    default-language:   Haskell2010
    type:               exitcode-stdio-1.0
    hs-source-dirs:     examples
    main-is:            example0003-linear-algebra.lhs
    build-depends:      subhask, base

--------------------------------------------------------------------------------

benchmark Vector
    default-language: Haskell2010
    type:             exitcode-stdio-1.0
    hs-source-dirs:   bench
    main-is:          Vector.hs
    build-depends:
        base,
        subhask,
        criterion                   == 1.1.0.0,
        MonadRandom

    ghc-options:
        -O2
        -funbox-strict-fields
        -fexcess-precision

--         -fliberate-case-threshold=100000
--         -fexpose-all-unfoldings
--         -fmax-simplifier-iterations=10
--         -fmax-worker-args=100
--         -fsimplifier-phases=5
--         -fspec-constr-count=50

        -fllvm
        -optlo-O3
        -optlo-enable-fp-mad
        -optlo-enable-no-infs-fp-math
        -optlo-enable-no-nans-fp-math
        -optlo-enable-unsafe-fp-math

--         -ddump-to-file
--         -ddump-rule-firings
--         -ddump-rule-rewrites
--         -ddump-rules
--         -ddump-cmm
--         -ddump-simpl
--         -ddump-simpl-stats
--         -dppr-debug
--         -dsuppress-module-prefixes
--         -dsuppress-uniques
--         -dsuppress-idinfo
--         -dsuppress-coercions
--         -dsuppress-type-applications