
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@free.fr

On Sun, Jul 22, 2012 at 10:46 AM, Pierre Michallet
** To me, stone has 4 parameters ("STON", "Stones number", Nothing,Nothing) and a result (myTog stone) as in the definition given by the compiler.
Yes. So why are you trying to provide the result that it's supposed to produce? -- brandon s allbery allbery.b@gmail.com wandering unix systems administrator (available) (412) 475-9364 vm/sms

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@free.fr
participants (3)
-
Brandon Allbery
-
Nick Vanderweit
-
Pierre Michallet