packages feed

binary-enum (empty) → 0.1.0.0

raw patch · 4 files changed

+89/−0 lines, 4 filesdep +basedep +binarysetup-changed

Dependencies added: base, binary

Files

+ Data/Binary/Enum.hs view
@@ -0,0 +1,27 @@+{-# LANGUAGE  ViewPatterns, ScopedTypeVariables #-}++module Data.Binary.Enum where++import Prelude+import Data.Binary+import Control.Applicative+import qualified Data.List as DL++-- | we can store Enum values inside values we know how to store, so let+newtype BitMap t a = BitMap [a]+  -- ^ Map lets you encode 'flags' compressing distinct eg. packing 8 diferent flags per byte+newtype BitEnc t a = BitEnc a+          -- ^ t is a store type, you will need to make sure thats your enum fits there++instance (Enum a, Enum t, Binary t) => Binary (BitEnc t a) where+  put (BitEnc a) = put (toEnum . fromEnum $ a :: t)+  get = BitEnc . toEnum . fromEnum <$> (get :: Get t)++instance (Enum a, Eq a, Eq t, Num t, Integral t, Binary t) => Binary (BitMap t a) where+  put (BitMap a) = put ( foldr (\(fromEnum -> x) y -> 2 ^ x + y ) 0 (DL.nub a) :: t )+  get = BitMap . process 0 <$> (get :: Get t)+    where+      process _ 0    = []+      process k (flip divMod 2 -> (d, m))+        | m == 1     = toEnum k : process (k + 1) d+        | otherwise  =            process (k + 1) d
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2015, Marcin Tolysz++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Marcin Tolysz nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ binary-enum.cabal view
@@ -0,0 +1,30 @@+-- Initial binary-enum.cabal generated by cabal init.  For further +-- documentation, see http://haskell.org/cabal/users-guide/++name:                binary-enum+version:             0.1.0.0+synopsis:            Simple wrappers around enum types+description:         allowing to serise to/from binary both as values and bitmasks+homepage:            https://github.com/tolysz/binary-enum+license:             BSD3+license-file:        LICENSE+author:              Marcin Tolysz+maintainer:          tolysz@gmail.com+copyright:           2015(c) Marcin Tolysz+category:            Data+build-type:          Simple+-- extra-source-files:  +cabal-version:       >=1.10++source-repository head+  type: git+  location: git://github.com/tolysz/binary-enum.git++library+  exposed-modules:     Data.Binary.Enum+  -- other-modules:       +  -- other-extensions:    +  build-depends: base >=4.8 && <5+               , binary+  -- hs-source-dirs:      +  default-language:    Haskell2010