From 3c29e7e92c67349ff65bc8905cc48b40ff9bce3f Mon Sep 17 00:00:00 2001 From: Bodigrim Date: Wed, 7 Jan 2026 22:39:43 +0000 Subject: [PATCH] Add another example for GHC-39999 --- .../GHC-39999/overloaded-number/after/Lib.hs | 4 +++ .../GHC-39999/overloaded-number/before/Lib.hs | 4 +++ .../GHC-39999/overloaded-number/index.md | 31 +++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 message-index/messages/GHC-39999/overloaded-number/after/Lib.hs create mode 100644 message-index/messages/GHC-39999/overloaded-number/before/Lib.hs create mode 100644 message-index/messages/GHC-39999/overloaded-number/index.md diff --git a/message-index/messages/GHC-39999/overloaded-number/after/Lib.hs b/message-index/messages/GHC-39999/overloaded-number/after/Lib.hs new file mode 100644 index 00000000..4860b7b1 --- /dev/null +++ b/message-index/messages/GHC-39999/overloaded-number/after/Lib.hs @@ -0,0 +1,4 @@ +module Lib where + +foo :: [Int] +foo = map (+ 1) [0] diff --git a/message-index/messages/GHC-39999/overloaded-number/before/Lib.hs b/message-index/messages/GHC-39999/overloaded-number/before/Lib.hs new file mode 100644 index 00000000..faae5bd3 --- /dev/null +++ b/message-index/messages/GHC-39999/overloaded-number/before/Lib.hs @@ -0,0 +1,4 @@ +module Lib where + +foo :: [Int] +foo = map (+ 1) 0 diff --git a/message-index/messages/GHC-39999/overloaded-number/index.md b/message-index/messages/GHC-39999/overloaded-number/index.md new file mode 100644 index 00000000..e72a2589 --- /dev/null +++ b/message-index/messages/GHC-39999/overloaded-number/index.md @@ -0,0 +1,31 @@ +--- +title: No instance for ‘Num [Int]’ arising from the literal ‘0’ +order: 5 +--- + +## Error message + +``` +Lib.hs:4:17: error: [GHC-39999] + • No instance for ‘Num [Int]’ arising from the literal ‘0’ + • In the second argument of ‘map’, namely ‘0’ + In the expression: map (+ 1) 0 + In an equation for ‘foo’: foo = map (+ 1) 0 + | +4 | foo = map (+ 1) 0 + | ^ +``` + +## Explanation + +Sometimes, when GHC encounters a type error, it suggests solving +it from an unexpected end. In this case, when it encouters a literal +instead of a list, it does not just complain about it. Instead it suspects +that maybe an author meant to overload numeric literals so that they can mean lists too. + +Every time you write a numeric literal in Haskell, +it gets desugared using `fromInteger :: Num a => Integer -> a`. So the program above +would be absolutely valid if only `[Int]` itself (not just `Int`) was an instance of `Num`. +While such interpretation of lists is not entirely out of the realm of possibility +(say, imagine that lists represent coefficients of polynomials), it's much more likely +that `map (+ 1) 0` is just a typo.