The strict-identity package

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain]

strict Identity monad for writing strict performant code sanely


[Skip to ReadMe]

Properties

Versions0.1.0.0, 0.1.0.0
Change logchangelog.md
Dependenciesbase (>=4.3 && <4.8) [details]
LicenseBSD3
AuthorCarter Tazio Schonwald
Maintainercarter at wellposed.com
CategoryControl
Home pagehttps://github.com/cartazio/strict-identity
Source repositoryhead: git clone http://github.com/cartazio/strict-identity.git
UploadedSun Jan 12 08:19:45 UTC 2014 by CarterSchonwald

Modules

[Index]

Downloads

Maintainers' corner

For package maintainers and hackage trustees

Readme for strict-identity-0.1.0.0

Build Status

#About

strict-identity package is meant to make writing nested strict let expression heavy code a bit more pleasant, for all those High Performance Haskell lib authors out there.

A simple example of the strict identity monad in action (and working wonderfully) is the following bit fiddling code, which generates C competitive assembly on both major GHC backends, -fasm and -fllvm

(>>) = unsafeShiftR
(<<) = unsafeShiftL
outerShuffle64A :: Word -> Word 
outerShuffle64A !x =
    runStrictIdentity $! do
        x <- return $! ((x .&. 0x00000000FFFF0000) << 16 )
            .|. ((x>>16) .&. 0x00000000FFFF0000) .|. (x .&. 0xFFFF00000000FFFF)
        x <-  return $! ((x .&. 0x0000FF000000FF00 ) <<  8 )
            .|. (x >> 8) .&. 0x0000FF000000FF00 .|. (x  .&. 0xFF0000FFFF0000FF)
        x<-  return $! (( x .&. 0x00F000F000F000F0 ) << 4 )
            .|. (x >> 4) .&. 0x00F000F000F000F0 .|. (x .&. 0xF00FF00FF00FF00F )
        x<-   return $!((x .&.  0x0C0C0C0C0C0C0C0C )<< 2 )
            .|. (x >> 2) .&. 0x0C0C0C0C0C0C0C0C .|.( x .&. 0xC3C3C3C3C3C3C3C3)
        x<-   return $! ( (x .&. 0x2222222222222222)  << 1 ) 
            .|. (x>> 1) .&. 0x2222222222222222 .|. (x .&. 0x9999999999999999)
        return x