3 ms·
Even if you're not curious about Haskell, have a look at the parser here. Parsing in Haskell feels like cheating.
by lallysingh 13y ago
Even if you're not curious about Haskell, have a look at the parser here. Parsing in Haskell feels like cheating.
- tel 13y ago(And is a really great example motivating both monads and monad transformers, for the curious!)
- freyrs3 13y agoThe shallow DSL in the LLVM monad is really nice, it looks almost like the IR itself but you can abstract over it and compose it with other code. DSLs are often overlooked when talking about monad use cases.
- tel 13y agoI really need to explore LLVM in more detail at some point.
- tel 13y agoFor the extra curious, here's a little Parser (untested, poor design, but generally the right idea) newtype Parser a = Parser { unParser :: MaybeT (State String) a } deriving ( Functor, Applicative, Alternative, Monad, MonadPlus, MonadTrans, MonadState String ) -- why write boilerplate when the -- compiler will for you? runParser :: Parser a -> String -> Maybe a runParser input = flip evalStateT input . runMaybeT -- | Parses a single character if it passes a predicate satisfy :: (Char -> Bool) -> Parser Char satisfy p = do (c:cs) <- get guard (p c) put cs return c char :: Char -> Parser Char char c = satisfy (== c) -- | Parses a whole string string :: String -> Parser String string = mapM char -- | Converts a parser to be surrounded by parentheses parens :: Parser a -> Parser a parens p = char '(' *> p <* char ')'
- casion 13y agoIf you're not curious about haskell, I suspect that parser is going to be very difficult to grok. At least a basic understanding of haskell (or similar) is going to be required to appreciate it, and at that point you're obviously someone who was curious enough to have the knowledge to understand it to begin with.