Partial application gives type error
I've tried to use the following line in my code (just to save some typing):
fI = fromIntegral
However, in certain cases it gives a type error, whereas the following version works:
fI x = fromIntegral x
Here a program that doesn't compile (with the error at the end):
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Gdk.EventM
import Control.Monad.Reader
import System.Random
import Data.Array.MArray
import Data.Array.IO
import Data.Word
main = do
parr <- newArray ((1,1,1),(600,600,3)) 127 :: IO (IOUArray (Int,Int,Int) Word8)
initGUI
win <- windowNew
brush <- pixbufNew ColorspaceRgb False 8 10 10
widgetShowAll win
dw <- widgetGetDrawWindow win
gc <- gcNew dw
timeoutAdd (draw parr dw gc brush) 1
on win deleteEvent $ tryEvent $ liftIO mainQuit
mainGUI
draw parr dw gc brush = do
x <- randomRIO (1,600)
y <- randomRIO (1,600)
rr <- randomRIO (0,255) :: IO Int
gr <- randomRIO (0,255) :: IO Int
br <- randomRIO (0,255) :: IO Int
rw <- readArray parr (x,y,1)
gw <- readArray parr (x,y,2)
bw <- readArray parr (x,y,3)
let (ro,go,bo) = (fI rw, fI gw, fI bw)
let cs = ro+go+bo
let rn = div cs 6 + div rr 2
let gn = div cs 6 + div gr 2
let bn = div cs 6 + div br 2
let (ra,ga,ba) = (fI rn,fI gn,fI bn)
writeArray parr (x,y,1) ra
writeArray parr (x,y,2) ga
writeArray parr (x,y,3) ba
pixbufFill brush ra ga ba 0
w <- randomRIO (1,10)
h <- randomRIO (1,10)
drawPixbuf dw gc brush 0 0 x y w h RgbDitherNone 0 0
return True
fI = fromIntegral
fitest.hs:39:19:
Couldn't match expected type `Word8' against inferred type `Int'
In the second argument of `pixbufFill', namely `ra'
In a stmt of a 'do' expression: pixbufFill brush ra ga ba 0
In the expression:
do x <- randomRIO (1, 600)
y <- randomRIO (1, 600)
rr <- randomRIO (0, 255) :: IO Int
gr <- randomRIO (0, 255) :: IO Int
....
Trac metadata
Trac field | Value |
---|---|
Version | 6.10.4 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler (Type checker) |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |