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 +27/−0
- LICENSE +30/−0
- Setup.hs +2/−0
- binary-enum.cabal +30/−0
+ 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