{-# OPTIONS_GHC -fno-monomorphism-restriction -fglasgow-exts #-}
import Control.Monad.State

newtype L a b m result =
     L {
       state:: StateT (K a b) m result}
        deriving Monad

data K a b = K

class Foo g where
  z:: Int -> g a b-> Int
 
what_was_that::(Show a, Show b, Eq b, Foo f, Monad m) => (b -> b) -> x -> L (f a b) s m ()
what_was_that = undefined

zork = what_was_that (\e-> e)

a = putStrLn "hi" 

mumble e = do
 modify id
 zork e 


