astview-0.1: data/HaskellExtParser.hs
module HaskellExtParser where
-- container
import Data.Tree (Tree(Node,rootLabel))
-- syb
import Data.Generics (Data)
-- base
import Unsafe.Coerce (unsafeCoerce)
-- local imports
import Language.Astview.Parser as Astview
import Language.Astview.DataTree
import Language.Haskell.Exts (parseFileContents)
import Language.Haskell.Exts.Parser (ParseResult(ParseOk))
import Language.Haskell.Exts.Syntax (Module)
haskellexts = Parser "Haskell" [".hs"] buildTreeHaskellExt
buildTreeHaskellExt :: String -> Tree String
buildTreeHaskellExt s = case parseHaskellExt s of
Right ast -> flat $ data2tree (ast::Module)
Left ParseError -> Node "ParseError" []
parseHaskellExt :: (Data a) => String -> Either ParseError a
parseHaskellExt s = case parseFileContents s of
ParseOk p -> unsafeCoerce $ Right p
_ -> Left ParseError