Error message: "Couldn't match expected type"

Hello. I'm learning Haskell on OSX. How can I fix this error message? (Code from The Haskell School of Expression, P40) Sorry for border you... Sok. import Graphics.SOE main() = runGraphics ( do w <- openWindow "My First Graphics Program" (300, 300) drawInWindow w (text(100, 200) "HelloFraphicsWorld") spaceClose w ) spaceClose :: Window -> IO() spaceClose w = do k <- getKey w if k == ' ' then closeWindow w else spaceClose w [1 of 1] Compiling Main ( firstGraphics.hs, firstGraphics.o ) firstGraphics.hs:3:1: Couldn't match expected type `IO t0' with actual type `() -> IO ()' In the expression: main When checking the type of the function `main'

On Thu, Oct 2, 2014 at 12:40 PM, S. H. Aegis
main() =
You have declared (well, described, but by type inference that's the same thing) main to take a parameter of type "unit" (empty tuple). main doesn't take parameters. Haskell parameters do not work the way most common languages do; using parentheses in function calls the way you would in C/Java/Python etc. will generally get you unexpected type errors, because you're telling it you're passing tuples around. So, the function call f() (f :: () -> a) is different from f (f :: a) and the function call f(a, b) (f :: (a,b) -> c) is different from f a b (f :: a -> b -> c) (The inferred type of `f` is shown after each call.) -- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net

Oh... my...
Thank you so much.
Maybe, I'm confused with C.
Fix main() to main, it works! =)
Thank you again, and have a nice day.
Sincerely, Sok
2014-10-03 1:49 GMT+09:00 Brandon Allbery
On Thu, Oct 2, 2014 at 12:40 PM, S. H. Aegis
wrote: main() =
You have declared (well, described, but by type inference that's the same thing) main to take a parameter of type "unit" (empty tuple). main doesn't take parameters.
Haskell parameters do not work the way most common languages do; using parentheses in function calls the way you would in C/Java/Python etc. will generally get you unexpected type errors, because you're telling it you're passing tuples around. So, the function call
f() (f :: () -> a)
is different from
f (f :: a)
and the function call
f(a, b) (f :: (a,b) -> c)
is different from
f a b (f :: a -> b -> c)
(The inferred type of `f` is shown after each call.)
-- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
-- Sok Ha, CHANG Dr. Chang's Clinic. #203. 503-23. AmSa-Dong, GangDong-Gu, Seoul. Tel: +82-2-442-7585
participants (2)
-
Brandon Allbery
-
S. H. Aegis