Newbie question: inferred type

Hi, Newbie question. Given the inferred type for square, the inferred types for quad1, quad2 and quad3 are what I would expect. Is there a straightforward explanation (i.e. one that a newbie would understand) as to why the inferred type for quad4 is less general? Regards, dl -- GHC Interactive, version 6.4, for Haskell 98. Prelude> let square x = x * x Prelude> :t square square :: (Num a) => a -> a Prelude> let quad1 x = square (square x) Prelude> :t quad1 quad1 :: (Num a) => a -> a Prelude> let quad2 x = square $ square x Prelude> :t quad2 quad2 :: (Num a) => a -> a Prelude> let quad3 x = (square . square) x Prelude> :t quad3 quad3 :: (Num a) => a -> a Prelude> let quad4 = square . square Prelude> :t quad4 quad4 :: Integer -> Integer ___________________________________________________________ Yahoo! Photos NEW, now offering a quality print service from just 8p a photo http://uk.photos.yahoo.com

I think this is the monomorphism restriction, you can see more details
on the web page:
http://www.haskell.org/hawiki/MonomorphismRestriction
On 3/30/06, David Laffin
Hi,
Newbie question. Given the inferred type for square, the inferred types for quad1, quad2 and quad3 are what I would expect. Is there a straightforward explanation (i.e. one that a newbie would understand) as to why the inferred type for quad4 is less general?
Regards, dl
-- GHC Interactive, version 6.4, for Haskell 98.
Prelude> let square x = x * x Prelude> :t square square :: (Num a) => a -> a
Prelude> let quad1 x = square (square x) Prelude> :t quad1 quad1 :: (Num a) => a -> a
Prelude> let quad2 x = square $ square x Prelude> :t quad2 quad2 :: (Num a) => a -> a
Prelude> let quad3 x = (square . square) x Prelude> :t quad3 quad3 :: (Num a) => a -> a
Prelude> let quad4 = square . square Prelude> :t quad4 quad4 :: Integer -> Integer
___________________________________________________________ Yahoo! Photos – NEW, now offering a quality print service from just 8p a photo http://uk.photos.yahoo.com _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

most probably yes. I had the exact same question for:
module Factors
where
import Prelude
divides x y = (mod x y == 0)
factors x = filter (divides x) [1..x]
nonTrivialFactors x = filter (\y -> y /= 1 && y /= x)
[1..x]
isEmpty [] = True
isEmpty _ = False
-- isPrime = isEmpty . nonTrivialFactor
-- says isPrime :: Integer -> Bool
-- this one say isPrime :: (Integral a) => a -> Bool
isPrime x = isEmpty (nonTrivialFactors x)
frankly this is not desired, but I cannot see why it's
particularly harmful. is it?
note: I was devising this example mostly to show the
usefulness of laziness ;)
--- Neil Mitchell
I think this is the monomorphism restriction, you can see more details on the web page:
http://www.haskell.org/hawiki/MonomorphismRestriction
On 3/30/06, David Laffin
wrote: Hi,
Newbie question. Given the inferred type for
square,
the inferred types for quad1, quad2 and quad3 are what I would expect. Is there a straightforward explanation (i.e. one that a newbie would understand) as to why the inferred type for quad4 is less general?
Regards, dl
-- GHC Interactive, version 6.4, for Haskell 98.
Prelude> let square x = x * x Prelude> :t square square :: (Num a) => a -> a
Prelude> let quad1 x = square (square x) Prelude> :t quad1 quad1 :: (Num a) => a -> a
Prelude> let quad2 x = square $ square x Prelude> :t quad2 quad2 :: (Num a) => a -> a
Prelude> let quad3 x = (square . square) x Prelude> :t quad3 quad3 :: (Num a) => a -> a
Prelude> let quad4 = square . square Prelude> :t quad4 quad4 :: Integer -> Integer
Yahoo! Photos � NEW, now offering a quality
___________________________________________________________ print
service from just 8p a photo http://uk.photos.yahoo.com
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
__________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
participants (3)
-
David Laffin
-
Imam Tashdid ul Alam
-
Neil Mitchell