@hackage katydid0.2.0.1
A haskell implementation of Katydid
Katydid
A Haskell implementation of Katydid.
This includes:
Documentation for katydid-haskell
Documentation for katydid-haskell/Relapse
All JSON and XML tests from the language agnostic test suite [passes].
Example
Validating a single structure can be done using the validate function:
validate :: Tree t => Refs -> [t] -> Bool
, where a tree is a class in the Parsers module:
class Tree a where
getLabel :: a -> Label
getChildren :: a -> [a]
Here is an example that validates a single JSON tree:
main = either
(\err -> putStrLn $ "error:" ++ err)
(\valid -> if valid
then putStrLn "dragons exist"
else putStrLn "dragons are fictional"
) $
Relapse.validate <$>
runExcept (Relapse.parseGrammar ".DragonsExist == true") <*>
Json.decodeJSON "{\"DragonsExist\": false}"
Efficiency
If you want to validate multiple trees using the same grammar then the filter function does some internal memoization, which makes a huge difference.
filter :: Tree t => Refs -> [[t]] -> [[t]]