[Haskell-beginners] Pb with toggleActionNew
Nick Vanderweit
nick.vanderweit at gmail.com
Sun Jul 22 23:13:30 CEST 2012
Besides the fact that you are trying to pass the result of toggleActionNew as
an argument, you're going to end up with problems regarding the type signature
of togls when you try to invoke toggleActionNew, whose type signature is:
toggleActionNew :: String
-> String
-> Maybe String
-> Maybe String
-> IO ToggleAction
So it's a function that, when passed its four arguments, yields an IO
ToggleAction. One of the important aspects of the IO monad is that it can't be
(safely) escaped, so unlike many monads, there isn't a function:
escapeIO :: IO a -> a *
This is how the type system enforces that your Int -> Int functions can't
write to the hard drive, or accept input from stdin, for instance. The only
way to capture the result of an (IO a) is to use >>= and get another (IO b).
This means that your type signature for togls is impossible, and it appears
you should instead try for:
togls :: IO [ToggleAction]
In short: rethink what the possible types are, and don't misinterpret the
result of a function as one of its arguments.
- Nick
* Actually, this function does exist. It is called unsafePerformIO in
System.IO.Unsafe, and you really shouldn't use it unless you know what you are
doing.
On Sunday, July 22, 2012 04:46:56 PM Pierre Michallet wrote:
> I am trying to become acquainted with both haskell and Gtk thru the writing
> of small pieces of code exercising some Gtk functions. Having had problems
> with the ToggleEntry function (unable to get the checked/non checked status
> - refer to chapter 7.2 of the Gtk2HS tutorial) I have tried to understand
> the toggleAction thing.
> So I have written this :
>
> import Graphics.UI.Gtk.ActionMenuToolbar.ToggleAction
> ...
>
> togls::[ToggleAction]
> togls = let stone = toggleActionNew "STON" "Stones number" Nothing Nothing
> (myTog stone) deste = toggleActionNew "DEST" "Destination" Nothing Nothing
> (myTog deste) state = toggleActionNew "STAT" "Board status" Nothing Nothing
> (myTog state) in [stone,deste,state]
>
> myTog::ToggleAction->IO()
> myTog ta = putStrLn ("The name of the action is " ++ (toggleActionName ta))
>
> The compiler is not happy with this and sends back the following:
>
> ----------------------------------------------------------------------------
> ---------------------------------------------------------------
>
> The function 'toggleActionNew' is applied to five arguments but its type
> 'String ->String ->Maybe String -> Maybe stockId ->IO ToggleAction has only
> four.
>
> ----------------------------------------------------------------------------
> --------------------------------------------------------------- To me, stone
> has 4 parameters ("STON", "Stones number", Nothing,Nothing) and a result
> (myTog stone) as in the definition given by the compiler. I am using
> ghc-7.0.3
> gthk+-bundle_2.16.2-20090601_win32
> gtk-0.12.3.1 documentation
>
> I am certainly missing something obvious to everybody but I could not solve
> it , so I would appreciate any help on this topic.
>
> Thanks in advance
>
> p.michallet at free.fr
More information about the Beginners
mailing list