Skip to content

Instantly share code, notes, and snippets.

@snoyberg
Created December 30, 2010 20:39
Show Gist options
  • Save snoyberg/760275 to your computer and use it in GitHub Desktop.
Save snoyberg/760275 to your computer and use it in GitHub Desktop.
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)
main = do
[x] <- getArgs
y <- T.readFile x
let z = parse (many $ (parser <|> (anyChar >> return Nothing))) y
case z of
Fail{} -> return ()
Done _ r -> print $ catMaybes r
data TempType = Hamlet | Cassius | Julius | Widget
deriving Show
parser = do
typ <- (string "$(hamletFile " >> return Hamlet)
<|> (string "$(cassiusFile " >> return Cassius)
<|> (string "$(juliusFile " >> return Julius)
<|> (string "$(widgetFile " >> return Widget)
skipWhile isSpace
_ <- char '"'
x <- many1 $ satisfy (/= '"')
_ <- char '"'
skipWhile isSpace
_ <- char ')'
return $ Just (typ, x)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment