Skip to content

Instantly share code, notes, and snippets.

@valyakuttan
valyakuttan / ParseInt.hs
Created February 12, 2014 06:51
Real World Haskell Chapter 19. Error handling Exercises
-- file: ch19/ParseInt.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
import Data.Char
import Control.Monad
import Control.Monad.Error
import Control.Monad.State
import qualified Data.ByteString.Char8 as B
data ParseError = NumericOverflow
@valyakuttan
valyakuttan / Shell.hs
Last active August 29, 2015 13:56
Executing privileged Shell commands from Haskell programs with sudo. (Caveat: Change sudo password remember time for security)
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
import System.Exit
import System.IO
import Control.Exception (bracket_)
import System.Process (readProcessWithExitCode)
import Control.Monad.Error (MonadError, ErrorT, runErrorT, throwError, lift)
import Control.Monad.IO.Class
newtype Shell a = Shell { runShell :: ErrorT String IO a }
@valyakuttan
valyakuttan / install-lens.sh
Created February 28, 2014 17:45
Install lens package on debian system.
# before install lens, install zlib development package
sudo apt-get install zlib1g-dev
cabal install lens
@valyakuttan
valyakuttan / RState.hs
Created March 12, 2014 11:54
Reverse State Monad from Luke Palmer's blog
{-
from http://lukepalmer.wordpress.com/2008/08/10/mindfuck-the-reverse-state-monad/
also look at https://github.com/luqui/backward-state
-}
module RState where
newtype RState s a = RState { runRState :: s -> (a,s) }
@valyakuttan
valyakuttan / StateB.hs
Created March 12, 2014 12:09
Reverse State Monad example
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
module StateB where
import Control.Monad.State
newtype StateB s a = StateB {runStateB :: s -> (a,s)}
instance Monad (StateB s) where
@valyakuttan
valyakuttan / install_idris.sh
Created March 14, 2014 07:43
Inastall Idris on debian
#! /bin/bash
# install ghc-terminfo-dev
sudo apt-get install libghc-terminfo-dev
# install alex from hackage
cabal update; cabal install alex
# install idris from hackage
cabal install idris
#!/bin/sh
# from http://stackoverflow.com/questions/1471571/how-to-configure-postgresql-for-the-first-time
#
# debian jessie
# PostgreSQL 9.3
sudo apt-get install postgresql postgresql-client
# connect to standard system database template1
import Control.Monad
import Control.Monad.ST
import Data.Array.ST
import Data.Array.Unboxed
primesUpto :: Int -> [Int]
primesUpto n = [p | (p, True) <- assocs $ sieve n]
sieve :: Int -> UArray Int Bool
sieve n = runSTUArray $ do
import Control.Monad
main :: IO ()
main = forM_ [1..100] $ \n -> do
let f n = case (n `mod` 2, n `mod` 5) of
(0,0) -> "fizzbuzz"
(0,_) -> "fizz"
(_,0) -> "buzz"
_ -> show n
putStrLn $ f n