Skip to content

Instantly share code, notes, and snippets.

View snoyberg's full-sized avatar

Michael Snoyman snoyberg

View GitHub Profile
@snoyberg
snoyberg / gist:742455
Created December 15, 2010 19:24
enumeratee that appends to a stream
after :: Enumerator a IO b -> Enumeratee a a IO b
after enum =
loop
where
loop = checkDone $ continue . step
step k EOF = enum (Continue k) >>== return
step k s = k s >>== loop
@snoyberg
snoyberg / find-templates.hs
Created December 30, 2010 20:39
Determine Hamlet, Cassius and Julius templates used by a Yesod application
{-# LANGUAGE OverloadedStrings #-}
import Language.Haskell.Parser
import Language.Haskell.Syntax
import System.Environment
import qualified Data.Text.Lazy as T
import qualified Data.Text.Lazy.IO as T
import Data.Attoparsec.Text.Lazy
import Control.Applicative ((<|>))
import Data.Maybe (catMaybes)
import Data.Char (isSpace)
@snoyberg
snoyberg / i18n.hs
Created January 13, 2011 22:03
Possible approach to internationalization in Haskell
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleContexts #-}
import Data.Maybe (fromMaybe)
class MaybeRead a where
maybeRead :: String -> Maybe a
class MaybeRead (Language a) => I18N a where
type Language a
type Message a
import qualified Data.IORef as I
import qualified Control.Exception as E
import Control.Concurrent
import Control.Exception
import Control.Monad
import Network.Socket
main :: IO ()
main = do
pairCount <- I.newIORef 0
{-# LANGUAGE OverloadedStrings, TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell #-}
module Yesod.Dynamic
( YesodDynamic
, yesodDynamic
, Handler
, Widget
, Method
, returnY
) where
@snoyberg
snoyberg / all-my-issues.hs
Created March 27, 2011 21:28
Download a list of all open issues for a Github user
{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Enumerator
import Data.Aeson
import Data.Aeson.Parser (json)
import System.Environment (getArgs)
import qualified Data.ByteString.Char8 as S8
import qualified Data.Attoparsec.Lazy as AL
import Data.Text (Text, unpack)
main = getArgs >>= mapM_ getInfo
@snoyberg
snoyberg / warp-signal.hs
Created July 22, 2011 05:48
Warp signal handling
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai (responseLBS)
import Network.Wai.Handler.Warp (run)
import Network.HTTP.Types (status200)
import System.Posix.Signals (sigINT, installHandler, Handler (CatchOnce))
import Control.Concurrent (forkIO, killThread)
import Control.Concurrent.MVar (newEmptyMVar, putMVar, takeMVar)
app _ = return $ responseLBS status200 [] "foo"
@snoyberg
snoyberg / Xml2Html.hs
Created August 21, 2011 07:18
Convert xml-enumerator values to blaze-html values
module Text.XML.Xml2Html () where
import qualified Text.XML.Enumerator.Resolved as X
import qualified Text.Blaze as B
import qualified Text.Blaze.Html5 as B5
import qualified Text.Blaze.Internal as BI
import qualified Data.Text as T
import Data.String (fromString)
import Data.Monoid (mempty)
import Data.List (foldl')
{-# LANGUAGE FlexibleInstances #-}
import Database.Persist
import Control.Monad.Trans.Error
import Control.Monad.Trans.Class
import Data.Enumerator
newtype OcrError = OE String
instance Error OcrError
@snoyberg
snoyberg / liftEnum.hs
Created August 24, 2011 13:57
Lift the inner monad for an enumerator
import Control.Monad.Trans.Error
import Control.Monad.Trans.Class
import Data.Enumerator
data In = In
data Out = Out
data OcrError = OcrError
instance Error OcrError