Hi,

I think the `forall a` is binding `[Int]` which explains the previous error.

I now have
  `st :: [Int] -> [Int]`  -- result of unification and substitution
  `tx :: [Int]              -- argument type

I can `mkAppTy st tx` which gives an unapplied application
  `mkAppTy st tx` --> [Int] -> [Int] [Int]
how do I get that application to be applied?

Vivian

On 4 July 2011 14:51, Vivian McPhail <[email protected]>wrote:

> 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