Skip to content

Instantly share code, notes, and snippets.

View raimohanska's full-sized avatar

Juha Paananen raimohanska

View GitHub Profile
@raimohanska
raimohanska / ByteStringHelper.hs
Created November 8, 2011 08:29
Haskell Data.ByteString <-> String conversion helper
module ByteStringHelper where
import Data.ByteString as B
import Data.String
unpack :: B.ByteString -> String
unpack = read . show
pack :: String -> B.ByteString
pack = read . show
@raimohanska
raimohanska / Transactional.hs
Created November 11, 2011 08:05
A simple Monad for Transactional actions
module Transactional(Transactional, Connection, transactionally, getConnection) where
data Connection = Connection
data Transactional a = Transactional (Connection -> IO a)
instance Monad Transactional where
(>>=) op toNext = Transactional $ \conn -> perform conn op >>= perform conn . toNext
return a = Transactional $ return . const a
getConnection :: Transactional Connection
@raimohanska
raimohanska / Authenticator.java
Created November 11, 2011 11:22
Android Google Authentication integration
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
@raimohanska
raimohanska / AesonTest.hs
Created December 2, 2011 20:53
Data.Aeson.Generic examples with Strings
{-# LANGUAGE OverloadedStrings, DeriveDataTypeable, NoMonomorphismRestriction #-}
module AesonTest where
import qualified Data.Aeson.Generic as A
import qualified Data.ByteString.Lazy as L8
import Data.Data
import Data.Typeable
import Codec.Binary.UTF8.String as U8
import Data.Maybe
@raimohanska
raimohanska / XmlClean.hs
Created December 12, 2011 12:46
Clean whitespace from XML
import Text.Regex.XMLSchema.String(match, sed)
clean :: String -> String
clean = sed (const "><") ">\\s*<" . trim
where trim = dropWhile whitespace . reverse . dropWhile whitespace . reverse
whitespace c = match "\\s" [c]
@raimohanska
raimohanska / Cache.scala
Created December 15, 2011 11:55
My first Scala cache
package com.karma.cache
import collection.immutable.HashMap
trait Cache[K, V] {
def get(key : K, fetch : (K => V)) : V
}
class NoCache[K, V] extends Cache[K, V] {
def get(key : K, fetch : (K => V)) : V = fetch(key)
@raimohanska
raimohanska / ZipSum.hs
Created January 11, 2012 14:31
reactive-banana Events, Behaviors and Zipping with +
import Reactive.Banana
import Control.Concurrent
main = do
-- Create handles for pushing values into events
(addHandler1, push1) <- newAddHandler
(addHandler2, push2) <- newAddHandler
-- Create event network
network <- compile $ do
-- Actual events from AddHandlers
@raimohanska
raimohanska / iomonad1.roy
Created November 26, 2012 17:15
IO Monad in Roy
let ioMonad = {
return: \x -> (\() -> x)
bind: \action f -> (\() ->
let value = action ()
let action2 = f value
action2 ()
)
}
let putStrLn line = (\() -> console.log line)
@raimohanska
raimohanska / iomonad2.roy
Created November 26, 2012 17:16
IO Monad in Roy (why fails?)
let ioMonad = {
return: \x -> (\() -> x)
bind: \action f -> (\() ->
let value = action ()
let action2 = f value
action2 ()
)
}
let putStrLn line () = console.log line
@raimohanska
raimohanska / gist:4150252
Created November 26, 2012 19:56
Roy Monad syntax bug
let ioMonad = {
return: \x -> (\() -> x)
bind: \action f -> (\() ->
let value = action ()
let action2 = f value
action2 ()
)
}
let putStrLn line = (\() -> console.log line)