Hi,

I have two variables

  spin :: forall a. [a] -> [a]
  alist :: [GHC.Types.Int]

I can dynamically load and apply them.  What I cannot figure out how to do
is apply the type of `spin` to the type of `alist` to get

  (spin alist) :: [GHC.Types.Int]

When I use `Type.applyTy` I get the erronious type

[[GHC.Types.Int]] -> [[GHC.Types.Int]].

Code:

dynApply :: DynamicHValue -> DynamicHValue -> DynType (Maybe DynamicHValue)
dynApply (DynamicHValue tf f) (DynamicHValue tx x) =
  GHC.gcatch (do
               liftIO $ putStrLn $ showSDoc $ pprType tf
               liftIO $ putStrLn $ showSDoc $ pprType tx
               if not (isForAllTy tf)
                  then do
                    liftIO $ putStrLn "not ForAllTy"
                    return Nothing
                  else do
                    liftIO $ putStrLn "ForAllTy"
                    let (_,typ) = splitForAllTys tf
                    liftIO $ putStrLn $ showSDoc $ pprType typ
                    let ((at:_),_) = splitFunTys typ
                    liftIO $ putStrLn $ showSDoc $ pprType at
                    let vars = tyVarsOfTypes [at]
                    let um = tcMatchTy vars at tx
                    case um of
                      Just ts -> do
                              liftIO $ putStrLn $ "Type matched"
                              (DynamicHValue aft af) <- dynAdaptor ts tf
                              liftIO $ putStrLn $ "App Type"
                              let ty = applyTy tf tx
                              liftIO $ putStrLn $ showSDoc $ pprType ty
                              return $ Just $ DynamicHValue ty
(((unsafeCoerce af) f) x)
                      Nothing -> return Nothing
             )
         (\(e :: GHC.GhcException) -> return Nothing)
_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to