Skip to content

Instantly share code, notes, and snippets.

@raichoo
Last active August 29, 2015 14:16
Show Gist options
  • Save raichoo/5a31b5b5151f16b0b8c2 to your computer and use it in GitHub Desktop.
Save raichoo/5a31b5b5151f16b0b8c2 to your computer and use it in GitHub Desktop.
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FunctionalDependencies #-}
module MonadBase where
import Language.Haskell.TH
class (Monad m, Monad t) => MonadBase m t | t -> m where
liftBase :: m a -> t a
default liftBase :: (m ~ t) => m a -> t a
liftBase = id
makeMonadBase :: Name -> Q [Dec]
makeMonadBase n = return
[ InstanceD
[]
(AppT (AppT (ConT ''MonadBase) (ConT n)) (ConT n))
[]
]
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Main where
import MonadBase
makeMonadBase ''IO
main :: IO ()
main = liftBase $ putStrLn "You lift me UP!!!!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment