Skip to content

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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information