Skip to content

Instantly share code, notes, and snippets.

@nonowarn
nonowarn / awky.hs
Created November 9, 2009 05:09
Applicative Awky
import Control.Applicative
import Control.Monad
import Data.Maybe
-- Line oriented parser
newtype Awky a = Awky { app :: String -> Maybe a }
f :: Int -> Awky String
f n = Awky $ \str -> let ws = words str; len = length ws
in guard (n < len) >> Just (ws !! n)
@nonowarn
nonowarn / hima.log
Created November 14, 2009 20:05
HIMA #2
19:40 himabot: Applicative かわいいよ Applicative
19:49 kazu_: てすと
19:50 himabot: HIMA はじまりますよー (今回は Typeclassopedia をあがめ奉る会です)
19:59 kazu_: 始めますかー。
19:59 kazu_: こっちは、Typeclassopedia です。
20:00 himabot: HIMA はじめますよー (今回は Typeclassopedia を吊るし上げる会です)
20:00 kazu_: どう進めます?
20:00 nwn: どうしましょうか
20:00 kazu_: バラバラと質問を書いて行く?
20:01 kazu_: あるいは、論文を上から順に進んで、適宜質問を出す?
@nonowarn
nonowarn / Expr.hs
Created November 21, 2009 18:43
Simple Calculator
{-# LANGUAGE DeriveDataTypeable #-}
module Expr where
import Data.Maybe
import Data.Generics
import Control.Monad
import Control.Applicative
import Test.QuickCheck
@nonowarn
nonowarn / hima3.log
Created December 13, 2009 14:03
HIMA #3
nobsun: ここはHaskellプログラミングに興味をもつ人が,とりとめなく,おしゃべりをする場所です。
nobsun: またり部屋も用意してあります。> http://chaton.haskell.jp/matari/
nobsun: そろそろですね。
nobsun: 進行をどうするかちゃんと考えていませんが、「副作用」とその周辺の話題について、とりとめなくやりたいとおもいます。
nobsun: 「副作用がなくてなぜゲームが書けるのか」というところからはじめましょう。
fubabz: こんばんは
kazu: こんばんは。
nobsun: この疑問を誘発しているのは「Haskellは副作用がない」という宣伝だと思っているのですが。そうですか?
nobsun: こんばんは
kazu: そうです。
@nonowarn
nonowarn / IM.hs
Created December 25, 2009 19:37
Folding Maybe
import System.Directory
orElse :: Maybe a -> Maybe a -> Maybe a
orElse x y = maybe y Just x
orElseM :: (Monad m) => m (Maybe a) -> m (Maybe a) -> m (Maybe a)
orElseM x y = maybe y (return . Just) =<< x
findJust :: [Maybe a] -> Maybe a
findJust = foldr orElse Nothing
@nonowarn
nonowarn / Makefile
Created January 12, 2010 06:12 — forked from joevandyk/anagram.hs
Analyse Anagram
all: anagram
anagram: anagram.hs
ghc --make anagram.hs # -O2 -funbox-strict-fields
FILE=/usr/share/dict/words
bench: anagram
time ruby ./anagram.rb < $(FILE)
time ./anagram < $(FILE)
@nonowarn
nonowarn / Unmonad.hs
Created January 29, 2010 10:25
Finally Tagless Monads
import Data.Monoid
type State s a = s -> (a,s)
get :: State s s
set :: s -> State s ()
get s = (s,s)
set s _ = ((),s)
@nonowarn
nonowarn / Number.hs
Created February 1, 2010 13:06
Type-level Naturals
{-# OPTIONS_GHC -fglasgow-exts #-}
{-# LANGUAGE UndecidableInstances #-}
data S a
data Z
newtype Number s = Num ()
class AsInt n where
asInt :: Number n -> Int
@nonowarn
nonowarn / Makefile
Created February 11, 2010 03:47
Brainf**k Interpreter
bf: bf.hs
ghc --make -O2 bf
@nonowarn
nonowarn / Points.hs
Created March 2, 2010 00:39
Example of has
import Data.Has
import Control.Applicative
data X = X; data Y = Y; data Z = Z
newtype Point2D = P2 (X :> Int :&: Y :> Int)
deriving (Has (X `Labelled` Int),Has (Y `Labelled` Int))
getXY :: (Knows X Int p, Knows Y Int p) => p -> (Int,Int)
getXY = liftA2 (,) (prjl X) (prjl Y)