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,4 @@
TEST=dynload/poly
EXTRA_OBJS=Plugin.o
TOP=../../..
include ../../build.mk

View File

@ -0,0 +1,12 @@
module Plugin where
import API
import AltData.Dynamic
my_fun = plugin {
equals = \x y -> (x /= y) -- a strange equals function :)
}
resource_dyn :: Dynamic
resource_dyn = toDyn my_fun

View File

@ -0,0 +1,24 @@
{-# OPTIONS -cpp #-}
module API where
import AltData.Typeable
data Interface = Interface {
equals :: forall t. Eq t => t -> t -> Bool
}
--
-- see how it hides the internal type.. but to compile GHC still checks
-- the type.
--
instance Typeable Interface where
#if __GLASGOW_HASKELL__ >= 603
typeOf i = mkTyConApp (mkTyCon "API.Interface") []
#else
typeOf i = mkAppTy (mkTyCon "API.Interface") []
#endif
plugin :: Interface
plugin = Interface { equals = (==) }

View File

@ -0,0 +1,17 @@
{-# OPTIONS -cpp #-}
#include "../../../../config.h"
import System.Plugins
import API
main = do
m_v <- dynload "../Plugin.o" ["../api"]
[]
"resource_dyn"
case m_v of
LoadFailure _ -> error "didn't compile"
LoadSuccess _ (Interface eq) -> do
putStrLn $ show $ 1 `eq` 2
putStrLn $ show $ 'a' `eq` 'b'

View File

@ -0,0 +1,2 @@
True
True