Skip to content

Instantly share code, notes, and snippets.

@bos
bos / ATs
Created August 15, 2010 18:42
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, TypeFamilies #-}
module AT where
{- --- ORIGINAL --- -}
data Step s a = Done
| Skip !s
| Yield !a !s
{- --- WITH ATs --- -}
@bos
bos / ATs
Created August 15, 2010 18:43
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, TypeFamilies #-}
module AT where
{- --- ORIGINAL --- -}
data Step s a = Done
| Skip !s
| Yield !a !s
{- --- WITH ATs --- -}
diff -rN -u old-text/Data/Text/Encoding/Fusion/Common.hs new-text/Data/Text/Encoding/Fusion/Common.hs
--- old-text/Data/Text/Encoding/Fusion/Common.hs 2010-08-15 12:44:14.251803996 -0700
+++ new-text/Data/Text/Encoding/Fusion/Common.hs 2010-08-15 12:44:14.274804276 -0700
@@ -45,19 +45,19 @@
Done -> Done
Skip s' -> Skip (S s' N N N)
Yield x xs
- | n <= 0x7F -> Yield c (S xs N N N)
- | n <= 0x07FF -> Yield a2 (S xs (J b2) N N)
- | n <= 0xFFFF -> Yield a3 (S xs (J b3) (J c3) N)
import Control.Monad (replicateM_)
import qualified Data.ByteString as B
import Network.Format.LLSD
import System.Environment
main = do
[path, count] <- getArgs
replicateM_ (read count) $ do
bs <- B.readFile path
case parseXML bs of
import Control.Concurrent
import Control.Monad
import qualified Data.ByteString as B
import Network.Format.LLSD
import System.Environment
main = do
[path, threads, reads] <- getArgs
let nthreads = read threads
qs <- newQSem 0
src/Snap/Internal/Http/Parser.hs:126:4:
Couldn't match expected type `Iteratee IO a'
against inferred type `(a1, b)'
In the pattern: (out, _)
In a stmt of a 'do' expression:
(out, _) <- unsafeBufferIterateeWithBuffer
buf (ignoreEOF $ wrap killwrap it)
In the expression:
do { killwrap <- newIORef False;
(out, _) <- unsafeBufferIterateeWithBuffer
@bos
bos / DebugRTS.hs
Created November 27, 2010 03:39
A quick hack for debugging the GHC RTS
import Foreign.C.String
import Foreign.Ptr
import System.Posix.Internals
debug :: String -> IO ()
debug s = do
withCStringLen (s++"\n") $ \(ptr,len) ->
c_safe_write 2 (castPtr ptr) (fromIntegral len)
return ()
@bos
bos / CRS.f
Created April 7, 2011 01:09
Sparse matrix-vector multiplication in Haskell and Fortran 77
! From http://netlib.org/linalg/html_templates/node98.html
!
! val: non-zero values from the matrix
! col_ind: indices into val at which columns start in successive rows
! row_ptr: indices into val at which successive rows start
for i = 1, n
y(i) = 0
for j = row_ptr(i), row_ptr(i+1) - 1
y(i) = y(i) + val(j) * x(col_ind(j))
@bos
bos / SparseZip.hs
Created April 13, 2011 03:27
Sparse vector addition
-- Assumption: indices are sorted in ascending order.
type Sparse a = [(Int,a)]
zipWithS :: (Num a) => (a -> a -> a) -> Sparse a -> Sparse a -> Sparse a
zipWithS f as0 bs0 = filter ((/=0) . snd) $ go as0 bs0
where go ias@(ia@(i,a):as) jbs@(jb@(j,b):bs) =
case compare i j of
LT -> ia : go as jbs
EQ -> (i,f a b) : go as bs
@bos
bos / Wordy.hs
Created August 8, 2011 23:35
C++ and Haskell versions of code
{-# OPTIONS_GHC -O2 #-}
{-# LANGUAGE BangPatterns, MagicHash, OverloadedStrings, UnboxedTuples #-}
module Main (main) where
import Data.Monoid (mappend, mempty)
import GHC.Base (Int(..), chr, quotInt#, remInt#)
import Prelude hiding ((!!))
import System.Environment (getArgs)
import qualified Data.ByteString.Char8 as B