zot-0.0.2: src/ZotToSki.hs
module ZotToSki ( main ) where
import Parse ( Parse, token, tokens, ( >*> ), alt, build, eof )
main :: IO ()
main = interact $ zotToSKI . concat . lines
zotToSKI :: String -> String
zotToSKI = fst . head . ( parseZot >*> eof `build` fst )
parseZot :: Parse Char String
parseZot = parseApply `alt` parseS `alt` parseK `alt` parseI
parseApply :: Parse Char String
parseApply = token '1' >*> parseZot >*> parseZot `build`
\( _, ( ski1, ski2 ) ) -> '`' : ski1 ++ ski2
parseS, parseK, parseI :: Parse Char String
parseS = tokens "101010100" `build` const "s"
parseK = tokens "1010100" `build` const "k"
parseI = tokens "100" `build` const "i"