Import hs-plugins cvs
This commit is contained in:
69
examples/hmake/lib-plugs/Main.hs
Normal file
69
examples/hmake/lib-plugs/Main.hs
Normal file
@ -0,0 +1,69 @@
|
||||
--
|
||||
-- Copyright (c) 2004 Don Stewart - http://www.cse.unsw.edu.au/~dons
|
||||
-- GPL version 2 or later (see http://www.gnu.org/copyleft/gpl.html)
|
||||
--
|
||||
|
||||
import Eval.Haskell
|
||||
import Plugins.Load
|
||||
|
||||
import System.Exit ( ExitCode(..), exitWith )
|
||||
import System.IO
|
||||
import System.Console.Readline ( readline, addHistory )
|
||||
|
||||
symbol = "resource"
|
||||
|
||||
main = do
|
||||
putStrLn banner
|
||||
putStr "Loading package base" >> hFlush stdout
|
||||
loadPackage "base"
|
||||
putStr " ... linking ... " >> hFlush stdout
|
||||
resolveObjs
|
||||
putStrLn "done"
|
||||
|
||||
shell []
|
||||
|
||||
shell :: [String] -> IO ()
|
||||
shell imps = do
|
||||
s <- readline "plugs> "
|
||||
cmd <- case s of
|
||||
Nothing -> exitWith ExitSuccess
|
||||
Just (':':'q':_) -> exitWith ExitSuccess
|
||||
Just s -> addHistory s >> return s
|
||||
imps' <- run cmd imps
|
||||
shell imps'
|
||||
|
||||
run :: String -> [String] -> IO [String]
|
||||
run "" is = return is
|
||||
run ":?" is = putStrLn help >> return is
|
||||
|
||||
run ":l" _ = return []
|
||||
run (':':'l':' ':m) is = return (m:is)
|
||||
|
||||
run (':':'t':' ':s) is = do
|
||||
ty <- typeOf s is
|
||||
when (not $ null ty) (putStrLn $ s ++ " :: " ++ ty)
|
||||
return is
|
||||
|
||||
run (':':_) is = putStrLn help >> return is
|
||||
|
||||
run s is = do
|
||||
s <- unsafeEval ("show $ "++s) is
|
||||
when (isJust s) (putStrLn (fromJust s))
|
||||
return is
|
||||
|
||||
banner = "\
|
||||
\ __ \n\
|
||||
\ ____ / /_ ______ ______ \n\
|
||||
\ / __ \\/ / / / / __ `/ ___/ PLugin User's GHCi System, for Haskell 98\n\
|
||||
\ / /_/ / / /_/ / /_/ (__ ) http://www.cse.unsw.edu.au/~dons/hs-plugins\n\
|
||||
\ / .___/_/\\__,_/\\__, /____/ Type :? for help \n\
|
||||
\/_/ /____/ \n"
|
||||
|
||||
help = "\
|
||||
\Commands :\n\
|
||||
\ <expr> evaluate expression\n\
|
||||
\ :t <expr> show type of expression (monomorphic only)\n\
|
||||
\ :l module bring module in to scope\n\
|
||||
\ :l clear module list\n\
|
||||
\ :quit quit\n\
|
||||
\ :? display this list of commands"
|
Reference in New Issue
Block a user