#1455: Wildcard pattern _ generates defaulting warning
-----------------------+----------------------------------------------------
Reporter: guest | Owner:
Type: bug | Status: new
Priority: low | Milestone:
Component: Compiler | Version: 6.6
Severity: trivial | Keywords: wildcard defaulting warning
Difficulty: Unknown | Os: MacOS X
Testcase: | Architecture: x86
-----------------------+----------------------------------------------------
The ''second'' use of properFraction generates a Defaulting warning, even
though the Integral value in question is being thrown away:
{{{
module Main where
r :: Double
r = pi
main :: IO ()
main =
let (_,x) = properFraction r :: (Integer,Double)
(_,y) = properFraction r
in putStrLn $ show (x,y)
}}}
It is clearly trivial to work around this issue. However, if one takes the
point of view that all of one's final code should compile using the -Wall
-Werror flags, then the work around confirms dynamic typers' worst fears
about Haskell. One shouldn't have to say anything about a value that's
being thrown away; the compiler should make the most efficient call what
to do, not e.g. some tightly wound mathematician who believes that Integer
is the only valid Integral type.
Here is the compiler output:
{{{
% ghc -v -Wall -Werror Bug.hs
Glasgow Haskell Compiler, Version 6.6, for Haskell 98, compiled by GHC
version 6.6
Using package config file: /usr/local/lib/ghc-6.6/package.conf
wired-in package base mapped to base-2.0
wired-in package rts mapped to rts-1.0
wired-in package haskell98 mapped to haskell98-1.0
wired-in package template-haskell mapped to template-haskell-2.0
Hsc static flags: -static
Created temporary directory: /tmp/ghc12130_0
*** Checking old interface for main:Main:
*** Parser:
*** Renamer/typechecker:
Bug.hs:9:15:
Warning: Defaulting the following constraint(s) to type `Integer'
`Integral t' arising from use of `properFraction' at Bug.hs:9
:15-30
In the expression: properFraction r
In a pattern binding: (_, y) = properFraction r
In the expression:
let
(_, x) = properFraction r :: (Integer, Double)
(_, y) = properFraction r
in putStrLn $ (show (x, y))
*** Deleting temp files:
Deleting: /tmp/ghc12130_0/ghc12130_0.s
Warning: deleting non-existent /tmp/ghc12130_0/ghc12130_0.s
*** Deleting temp dirs:
Deleting: /tmp/ghc12130_0
}}}
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/1455>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs