packages feed

vector-0.3: vector.cabal

Name:           vector
Version:        0.3
License:        BSD3
License-File:   LICENSE
Author:         Roman Leshchinskiy
Maintainer:     Roman Leshchinskiy <rl@cse.unsw.edu.au>
Copyright:      (c) Roman Leshchinskiy 2008
Homepage:       http://darcs.haskell.org/vector
Category:       Data Structures
Synopsis:       Efficient Arrays
Description:
        .
        An efficient but highly experimental implementation of Int-indexed
        arrays with a powerful loop fusion framework.
        .

Cabal-Version:  >= 1.2
Build-Type:     Simple

Flag EnableAssertions
  Description: Enable assertions that check parameters to functions are reasonable.
               These will impose a moderate performance cost on users of the library,
               with the benefit that you get reasonable errors rather than segmentation faults!
  Default:     False

Library
  Extensions: CPP
  Exposed-Modules:
        Data.Vector.Fusion.Util
        Data.Vector.Fusion.Stream.Size
        Data.Vector.Fusion.Stream.Monadic
        Data.Vector.Fusion.Stream

        Data.Vector.MVector
        Data.Vector.MVector.New
        Data.Vector.IVector

        Data.Vector.Unboxed.Unbox
        Data.Vector.Unboxed.Mutable.ST
        Data.Vector.Unboxed.Mutable.IO
        Data.Vector.Unboxed

        Data.Vector.Mutable.ST
        Data.Vector.Mutable.IO
        Data.Vector
  Include-Dirs:
        include

  Install-Includes:
        phases.h

  Build-Depends: base >= 2 && < 4, array, ghc-prim,
                 ghc >= 6.9

-- -finline-if-enough-args is ESSENTIAL. If we don't have this the partial application
-- of e.g. Stream.Monadic.++ to the monad dictionary at the use site in Stream.++ causes
-- it to be fruitlessly inlined. This in turn leads to a huge RHS for Stream.++, so it
-- doesn't get inlined at the final call site and fusion fails to occur.
  Ghc-Options: -finline-if-enough-args
  
-- It's probably a good idea to compile the library with -O2 as well. However, it's probably
-- not as essential as you think because most of the optimisation occurs when the library
-- functions from here are inlined into the user programs (which SHOULD be compiled with -O2!).
--
-- We have to fiddle with the assertion stuff at this point too because -O2 implies -fno-ignore-asserts,
-- meaning that their relative ordering is CRUCIAL. Setting them together guarantees it.
  if flag(enableassertions)
    -- Asserts are ignored by default at -O1 or higher
    Ghc-Options: -O2 -fno-ignore-asserts
  else
    Ghc-Options: -O2