-- gtk2hs-cast-gtksourceview2 -- A type class for cast functions of Gtk2hs:
-- gtksourceview2 package
-- Copyright (c) 2009 Marco Túlio Gontijo e Silva <marcot@holoscopio.com>
-- CC0 Waiver 1.0 Universal [Beta 3]
-- See LICENSE
module Graphics.UI.Gtk.SourceView.Cast.TH (instance_) where
-- base
import Data.Maybe
-- hint
import Language.Haskell.Interpreter
-- template-haskell
import Language.Haskell.TH.Syntax
instance_ :: Q [Dec]
instance_
= do
(Right (elements :: [ModuleElem]))
<- qRunIO $ runInterpreter $ getModuleExports "Graphics.UI.Gtk.SourceView"
return $ map makeInstance_ $ mapMaybe isCastTo elements
isCastTo :: ModuleElem -> Maybe String
isCastTo (Fun ('c' : 'a' : 's' : 't' : 'T' : 'o' : rest)) = Just rest
isCastTo _others = Nothing
makeInstance_ :: String -> Dec
makeInstance_ type_
= InstanceD []
(AppT (ConT $ mkName "Cast") $ ConT $ mkName type_)
[ FunD (mkName "cast")
[ Clause [] (NormalB $ VarE $ mkName $ "castTo" ++ type_) []]]