Skip to content

Instantly share code, notes, and snippets.

View sordina's full-sized avatar

Lyndon Maydwell sordina

View GitHub Profile
@sordina
sordina / xorBitsLens.hs
Last active August 29, 2015 14:06
Adding xorish operations to Data.Bits.Lens
-- http://en.wikipedia.org/wiki/Rijndael_S-box
affineX' :: Word8 -> Word8 -> Word8
affineX' c b = b &~ forM_ [0..7] twiddleBits
where
twiddleBits :: Int -> StateT Word8 Identity ()
twiddleBits j = do
bitAt j .= f b 4
bitAt j .^|.= f b 5
@sordina
sordina / UniqHash2.hs
Created September 16, 2014 07:37
Broken :(
{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE FlexibleContexts #-}
module UniqHash (main, uniqHash) where
import System.Exit
import Data.Machine
import Control.Arrow
import Data.List (transpose)
{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE FlexibleContexts #-}
module UniqHash (main, uniqHash) where
import Data.Machine
import Control.Monad (when)
import System.Directory (doesFileExist)
import Control.Category (Category)
@sordina
sordina / scriptMidi.hs
Last active August 29, 2015 14:05
Run script commands from a midi device
-- NOTE: Now available as a package at https://github.com/sordina/ScriptMidi
import System.MIDI
import System.IO
import System.Process
import Control.Monad
import Control.Concurrent
import Safe
@sordina
sordina / lenses.hs
Last active August 29, 2015 14:05
From the MHUG meetup on 28 August, 2014
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -fno-warn-missing-signatures -fno-warn-type-defaults #-}
import Control.Lens
import Control.Monad.State
import Control.Arrow
import Data.Bits.Lens
import Data.Map
import Data.Word
@sordina
sordina / clj.bash
Created August 14, 2014 07:20
Quick Wrapper for clojure
#!/bin/bash
export CLASSPATH="$HOME/.m2/repository/org/clojure/clojure/1.6.0/clojure-1.6.0.jar"
TTY=`tty`
if [[ -t 1 && "$TTY" =~ "/" ]]
then
echo "Running clojure with classpath $CLASSPATH"
echo "Connected to Terminal - Wrapping with RLWrap"
#!/bin/bash
PREFIX="/tmp/rally_scripts"
ITEM_JSON="$PREFIX/rally_$$.json"
CHILDREN_JSON="$PREFIX/rally_$$_children.json"
TASKS_JSON="$PREFIX/rally_$$_tasks.json"
AUTH="-u $USERNAME:$PASSWORD"
mkdir -p "$PREFIX"
(deftype PromiseWrapper [r fun prom]
clojure.lang.IDeref
(deref [this]
(dosync
(let [current @r]
(if current (:value current)
(let [result (fun @prom)]
(ref-set r {:value result})
result))))))
@sordina
sordina / ci
Last active August 29, 2015 14:04
Create a cabal project for myself from a working directory
#!/bin/bash
if [[ ! "$1" || "$1" = "-h" || "$1" = "--help" ]]
then
echo "Usage: ci <directory>"
exit 1
fi
mkdir -p "$1"
cd "$1"
@sordina
sordina / diffline.hs
Last active August 29, 2015 14:03
Remove common prefixes
{-# LANGUAGE QuasiQuotes #-}
import Text.InterpolatedString.Perl6 -- For tests
import System.Environment (getArgs)
import Data.List.Split (splitOn)
import Data.List (intercalate)
-- IO:
main :: IO ()