packages feed

subhask-0.1.0.1: subhask.cabal

name:                subhask
version:             0.1.0.1
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.Trans.Kernel
        SubHask.Algebra.Vector

        SubHask.Category
        SubHask.Category.Finite
        SubHask.Category.Product
        SubHask.Category.Polynomial
        SubHask.Category.Slice
        SubHask.Category.Trans.Bijective
--         SubHask.Category.Trans.Continuous
        SubHask.Category.Trans.Constrained
        SubHask.Category.Trans.Derivative
--         SubHask.Category.Trans.Linear
        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,
        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,
        vector                      == 0.10.12.3,
        hmatrix                     == 0.16.1.5,

        -- compatibility control flow
        mtl                         == 2.2.1,
        MonadRandom                 == 0.1.13,
        pipes                       == 4.1.3,

        -- compatibility data structures
        bytestring                  == 0.10.6.0,
        bloomfilter                 == 2.0.1.0,
        cassava                     == 0.4.2.3,
        containers                  == 0.5.6.2,
        hyperloglog                 == 0.3.1,

        -- required for hyperloglog compatibility
        semigroups                  == 0.16.2,
        bytes                       == 0.15,
        approximate                 == 0.2.1.1,
        lens                        == 4.9.1

    default-language:
        Haskell2010

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

Test-Suite TestSuite-Unoptimized
    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 cosing travis tests to fail.
--
-- Test-Suite TestSuite-Optimized
--     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
    type:               exitcode-stdio-1.0
    hs-source-dirs:     examples
    main-is:            example0001-polynomials.lhs
    build-depends:      subhask, base

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

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

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

benchmark Vector
    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