--- /dev/null
+:unset +s +t
+-- tests for :def, :undef
+let void m = m >> return ""
+let echo s = void (putStrLn s)
+:def echo echo
+:echo hello, world!
+
+let echo s = return (":! echo " ++ map Char.toUpper s)
+:echo hello, world!
+:def echo echo
+:undef echo
+:def echo echo
+:echo hello, world!
--- /dev/null
+ ___ ___ _
+ / _ \ /\ /\/ __(_)
+ / /_\// /_/ / / | | GHC Interactive, version 4.11, For Haskell 98.
+/ /_\\/ __ / /___| | http://www.haskell.org/ghc/
+\____/\/ /_/\____/|_| Type :? for help.
+
+Loading package std ... linking ... done.
+Prelude> :unset +s +t
+Prelude> -- tests for :def, :undef
+Prelude> let void m = m >> return ""
+Prelude> let echo s = void (putStrLn s)
+Prelude> :def echo echo
+Prelude> :echo hello, world!
+Prelude>
+Prelude> let echo s = return (":! echo " ++ map Char.toUpper s)
+hello, world!
+Prelude> :echo hello, world!
+Prelude> :def echo echo
+ghc: command `echo' is already defined
+Prelude> :undef echo
+Prelude> :def echo echo
+Prelude> :echo hello, world!
+HELLO, WORLD!
+Prelude> Leaving GHCi.
+hello, world!