Update examples

This commit is contained in:
Don Stewart
2005-09-03 04:45:14 +00:00
parent 5321754614
commit dff0363224
421 changed files with 19 additions and 9 deletions

View File

@ -0,0 +1,5 @@
TEST=makewith/unsafeio
TOP=../../..
include ../../build.mk

View File

@ -0,0 +1,3 @@
hmm. on 6.3 we need to add 'mtl' to a package dependency, other
HSlang complains of a missing symbol. Is this a bug in the
package.conf for HSlang?

View File

@ -0,0 +1,21 @@
{-# GLOBALOPTIONS -package mtl #-}
-- illustrates the use of static options in pragmas
import System.IO.Unsafe
import System.IO
import System.Process
resource = unsafe { field = date }
-- illustrates the use of the devil's work
date :: String
date = unsafePerformIO $ do
#if !defined(CYGWIN) || !defined(__MINGW32__)
(_,outh,_,proc) <- runInteractiveProcess "date" [] Nothing Nothing
#else
(_,outh,_,proc) <- runInteractiveProcess "@PREFIX@/../../bin/date" [] Nothing Nothing
#endif
waitForProcess proc
s <- hGetContents outh
return s

View File

@ -0,0 +1,13 @@
module Unsafe ( resource, resource_dyn ) where
import API
import Data.Dynamic
resource = unsafe
--
-- special
--
resource_dyn :: Dynamic
resource_dyn = toDyn resource

View File

@ -0,0 +1,13 @@
{-# OPTIONS -fglasgow-exts #-}
module API where
import Data.Dynamic
data Unsafe = Unsafe {
field :: String
}
deriving (Typeable, Show)
unsafe :: Unsafe
unsafe = Unsafe { field = "default value" }

View File

@ -0,0 +1,20 @@
import System.Plugins
import API
import Data.Either
conf = "../Unsafe.conf"
stub = "../Unsafe.stub"
apipath = "../api"
main = do
status <- makeWith conf stub ["-i"++apipath]
o <- case status of
MakeFailure e -> mapM_ putStrLn e >> error "failed"
MakeSuccess _ o -> return o
m_v <- load o [apipath] [] "resource"
v <- case m_v of
LoadSuccess _ v -> return v
_ -> error "load failed"
let s = field v
makeCleaner o
if null s then print False else print True

View File

@ -0,0 +1,8 @@
this is an example of an application that uses the HSConf library to
dynamically load compiled conf files.
We use the .conf file in the parent directory, and communicate with
the plugin via the API in the api_package/ directory.
The plugin is a .o file
The api is a GHC package archive

View File

@ -0,0 +1,6 @@
merge failed:
parse error in ../Unsafe.conf
line: 13, col: 1
a.out: failed