Re: calling polymorphic function in Selenium question

I tried that and I got the following error:
A pattern type signature cannot bind scoped type variables `a'
unless the pattern has a rigid type context
In the pattern: x :: Selenium a -> IO (Either String a)
In a stmt of a 'do' expression:
(x :: Selenium a -> IO (Either String a)) <- start
"
https://www.google.com"
In the expression:
do { (x :: Selenium a -> IO (Either String a)) <- start "
https://www.google.com";
Then I tried to add "forall a" but the Selenium library doesn't use forall
so there was a conflict. Is there a way to work around the rigid type error
you know of?
Thanks
On Apr 15, 3:14 pm, Brent Yorgey
On Sun, Apr 04, 2010 at 09:25:16PM -0400, MH wrote:
I am running the following code that is using Selenium. If you look at the function "start", you will see that the return type of the function is polymorphic. Now in main function, I call start function to get selenium IO monad and sequentially call selenium commands (open, doCommand etc...). The problem that I have here is, while I can call all Selenium commands with signature (String -> Selenium String), I can't call commands with signature (String -> Selenium Bool). As I understand it, even though "start" function shall return IO (Selenium a -> IO (Either String a)), it actually return IO (Selenium String -> IO (Either String String)).
Hmm, I must confess that I don't understand exactly what is going on here. One thing to try is to give an explicit type annotation at start's call site, something like
main = do (selenium :: Selenium a -> IO (Either String a)) <- start " http://www.google.com" selenium $ open "/" selenium $ doCommand SWindowMaximize [] selenium $ typeText (Name "q") "stuff" selenium $ clickAndWait (Name "btnG") return selenium
Does that help?
-Brent _______________________________________________ Beginners mailing list Beginners@haskell.orghttp://www.haskell.org/mailman/listinfo/beginners
participants (1)
-
MH