
johan.gronqvist:
I am a haskell-beginner and I wish to write a Forth-like interpreter. (Only for practice, no usefulness.)
I would like use a list (as stack) that can contain several kinds of values.
data Element = Int Int | Float Float | Func : Machine -> Machine | ...
Now I would like to have this type be an instance of the class Show, so that I can see what the stack contains in ghci.
Here's an interesting, I think, show for functions that we use in
lambdabot's Haskell interpreter environment:
module ShowQ where
import Language.Haskell.TH
import System.IO.Unsafe
import Data.Dynamic
instance (Typeable a, Typeable b) => Show (a -> b) where
show e = '<' : (show . typeOf) e ++ ">"
instance Ppr a => Show (Q a) where
show e = unsafePerformIO $ runQ e >>= return . pprint
which generates results like:
dons:: > toUpper
lambdabot::