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 <byorgey@seas.upenn.edu> wrote:
> 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