Cabal revisions of strict-base-types-0.3.0
Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.
revision 1
-Name: strict-base-types-Version: 0.3.0-Synopsis: Strict variants of the types provided in base.-Category: Data-Description:- It is common knowledge that lazy datastructures can lead to space-leaks.- This problem is particularly prominent, when using lazy datastructures to- store the state of a long-running application in memory. The easiest- solution to this problem is to use fully strict types to store such state- values. By \"fully strict types\" we mean types for whose values it holds- that, if they are in weak-head normal form, then they are also in normal- form. Intuitively, this means that values of fully strict types cannot- contain unevaluated thunks.- .- To define a fully strict datatype, one typically uses the following recipe.- .- 1. Make all fields of every constructor strict; i.e., add a bang to- all fields.- .- 2. Use only strict types for the fields of the constructors. - .- The second requirement is problematic as it rules out the use of- the standard Haskell 'Maybe', 'Either', and pair types. This library- solves this problem by providing strict variants of these types and their- corresponding standard support functions and type-class instances. - .- Note that this library does currently not provide fully strict lists.- They can be added if they are really required. However, in many cases one- probably wants to use unboxed or strict boxed vectors from the 'vector'- library (<http://hackage.haskell.org/package/vector>) instead of strict- lists. Moreover, instead of @String@s one probably wants to use strict- @Text@ values from the @text@ library- (<http://hackage.haskell.org/package/text>).- .- This library comes with batteries included; i.e., missing instances- for type-classes from the @deepseq@, @binary@, @aeson@, @QuickCheck@, and- @lens@ packages are included. Of particluar interest is the @Strict@- type-class provided by the lens library- (<http://hackage.haskell.org/packages/archive/lens/3.9.0.2/doc/html/Control-Lens-Iso.html#t:Strict>).- It is used in the following example to simplify the modification of- strict fields.- .- > (-# LANGUAGE TemplateHaskell #-) -- replace with curly braces, - > (-# LANGUAGE OverloadedStrings #-) -- the Haddock prologues are a P.I.T.A!- > - > import Control.Lens ( (.=), Strict(strict), from, Iso', makeLenses)- > import Control.Monad.State.Strict (State)- > import qualified Data.Map as M- > import qualified Data.Maybe.Strict as S- > import qualified Data.Text as T- > - > -- | An example of a state record as it could be used in a (very minimal)- > -- role-playing game.- > data GameState = GameState- > ( _gsCooldown :: !(S.Maybe Int)- > , _gsHealth :: !Int- > ) -- replace with curly braces, *grmbl*- > - > makeLenses ''GameState- > - > -- The isomorphism, which converts a strict field to its lazy variant- > lazy :: Strict lazy strict => Iso' strict lazy- > lazy = from strict- > - > type Game = State GameState- > - > cast :: T.Text -> Game ()- > cast spell =- > gsCooldown.lazy .= M.lookup spell spellDuration- > -- ... implement remainder of spell-casting ...- > where- > spellDuration = M.fromList [("fireball", 5)]- .- See- <http://www.haskellforall.com/2013/05/program-imperatively-using-haskell.html>- for a gentle introduction to lenses and state manipulation.- .- Note that this package uses the types provided by the 'strict' package- (<http://hackage.haskell.org/package/strict>), but organizes them a bit- differently. More precisely, the @strict-base-types@ package- .- - only provides the fully strict variants of types from 'base',- .- - is in-sync with the current base library (base-4.6), - .- - provides the missing instances for (future) Haskell platform packages, and- .- - conforms to the standard policy that strictness variants of an existing- datatype are identified by suffixing \'Strict\' or \'Lazy\' in the- module hierarchy.---License: BSD3-License-File: LICENSE-Author: Roman Leshchinskiy <rl@cse.unsw.edu.au>,- Simon Meier <iridcode@gmail.com>-Maintainer: Simon Meier <iridcode@gmail.com>-Copyright: (c) 2006-2008 by Roman Leshchinskiy- (c) 2013-2014 by Simon Meier-Homepage: https://github.com/meiersi/strict-base-types-Cabal-Version: >= 1.6-Build-type: Simple--source-repository head- type: git- location: https://github.com/meiersi/strict-base-types.git--library- build-depends: - base >= 4.5 && < 5- , lens >= 3.9- , QuickCheck >= 2- , aeson >= 0.6- , binary >= 0.5- , deepseq >= 1.3- , strict == 0.3.*- , bifunctors >= 3.0- , ghc-prim- hs-source-dirs: src- exposed-modules:- Data.Tuple.Strict- Data.Maybe.Strict- Data.Either.Strict- ghc-options: -Wall-+Name: strict-base-types +Version: 0.3.0 +x-revision: 1 +Synopsis: Strict variants of the types provided in base. +Category: Data +Description: + It is common knowledge that lazy datastructures can lead to space-leaks. + This problem is particularly prominent, when using lazy datastructures to + store the state of a long-running application in memory. The easiest + solution to this problem is to use fully strict types to store such state + values. By \"fully strict types\" we mean types for whose values it holds + that, if they are in weak-head normal form, then they are also in normal + form. Intuitively, this means that values of fully strict types cannot + contain unevaluated thunks. + . + To define a fully strict datatype, one typically uses the following recipe. + . + 1. Make all fields of every constructor strict; i.e., add a bang to + all fields. + . + 2. Use only strict types for the fields of the constructors. + . + The second requirement is problematic as it rules out the use of + the standard Haskell 'Maybe', 'Either', and pair types. This library + solves this problem by providing strict variants of these types and their + corresponding standard support functions and type-class instances. + . + Note that this library does currently not provide fully strict lists. + They can be added if they are really required. However, in many cases one + probably wants to use unboxed or strict boxed vectors from the 'vector' + library (<http://hackage.haskell.org/package/vector>) instead of strict + lists. Moreover, instead of @String@s one probably wants to use strict + @Text@ values from the @text@ library + (<http://hackage.haskell.org/package/text>). + . + This library comes with batteries included; i.e., missing instances + for type-classes from the @deepseq@, @binary@, @aeson@, @QuickCheck@, and + @lens@ packages are included. Of particluar interest is the @Strict@ + type-class provided by the lens library + (<http://hackage.haskell.org/packages/archive/lens/3.9.0.2/doc/html/Control-Lens-Iso.html#t:Strict>). + It is used in the following example to simplify the modification of + strict fields. + . + > (-# LANGUAGE TemplateHaskell #-) -- replace with curly braces, + > (-# LANGUAGE OverloadedStrings #-) -- the Haddock prologues are a P.I.T.A! + > + > import Control.Lens ( (.=), Strict(strict), from, Iso', makeLenses) + > import Control.Monad.State.Strict (State) + > import qualified Data.Map as M + > import qualified Data.Maybe.Strict as S + > import qualified Data.Text as T + > + > -- | An example of a state record as it could be used in a (very minimal) + > -- role-playing game. + > data GameState = GameState + > ( _gsCooldown :: !(S.Maybe Int) + > , _gsHealth :: !Int + > ) -- replace with curly braces, *grmbl* + > + > makeLenses ''GameState + > + > -- The isomorphism, which converts a strict field to its lazy variant + > lazy :: Strict lazy strict => Iso' strict lazy + > lazy = from strict + > + > type Game = State GameState + > + > cast :: T.Text -> Game () + > cast spell = + > gsCooldown.lazy .= M.lookup spell spellDuration + > -- ... implement remainder of spell-casting ... + > where + > spellDuration = M.fromList [("fireball", 5)] + . + See + <http://www.haskellforall.com/2013/05/program-imperatively-using-haskell.html> + for a gentle introduction to lenses and state manipulation. + . + Note that this package uses the types provided by the 'strict' package + (<http://hackage.haskell.org/package/strict>), but organizes them a bit + differently. More precisely, the @strict-base-types@ package + . + - only provides the fully strict variants of types from 'base', + . + - is in-sync with the current base library (base-4.6), + . + - provides the missing instances for (future) Haskell platform packages, and + . + - conforms to the standard policy that strictness variants of an existing + datatype are identified by suffixing \'Strict\' or \'Lazy\' in the + module hierarchy. + + +License: BSD3 +License-File: LICENSE +Author: Roman Leshchinskiy <rl@cse.unsw.edu.au>, + Simon Meier <iridcode@gmail.com> +Maintainer: Simon Meier <iridcode@gmail.com> +Copyright: (c) 2006-2008 by Roman Leshchinskiy + (c) 2013-2014 by Simon Meier +Homepage: https://github.com/meiersi/strict-base-types +Cabal-Version: >= 1.6 +Build-type: Simple + +source-repository head + type: git + location: https://github.com/meiersi/strict-base-types.git + +library + build-depends: + base >= 4.5 && < 5 + , lens >= 3.9 + , QuickCheck >= 2 + , aeson >= 0.6 + , binary >= 0.5 + , deepseq >= 1.3 + , strict == 0.3.* + , bifunctors >= 3.0 && <5.1 + , ghc-prim + hs-source-dirs: src + exposed-modules: + Data.Tuple.Strict + Data.Maybe.Strict + Data.Either.Strict + ghc-options: -Wall +