Not in scope [GHC-76037]
An identifier can only be used if it is in scope; i.e. if it is bound or declared previously and that binding/declaration is available at the usage location.
Examples
Unbound data constructor in lambda
The data constructor A used in the lambda expression is not in scope.
Error Message
NotInScopeLambda.hs:3:6: error: [GHC-76037]
Not in scope: data constructor ‘A’
|
3 | f = \A -> A
| ^
NotInScopeLambda.hs
Before
module NotInScopeLambda where
f = \A -> A
After
module NotInScopeLambda where
data Foo = A | B
f :: Foo -> Foo
f = \A -> A
Unbound class name
The class name B referenced in the definition of class C is not in scope.
Error Message
NotInScopeClass.hs:3:8: error: [GHC-76037]
Not in scope: type constructor or class ‘B’
|
3 | class (B a) => C a where
| ^
NotInScopeClass.hs
Before
module NotInScopeClass where
class (B a) => C a where
op1 :: a -> Int
After
module NotInScopeClass where
class B a where
op :: a -> a
class (B a) => C a where
op1 :: a -> Int
Data constructor not imported
The import statement import Foo (Bar) imports the Bar data type, but not its constructor MkBar.
As such, the constructor is not in scope.
Error Message
IncorrectImport.hs:6:12: error: [GHC-76037]
Not in scope: data constructor ‘MkBar’
|
6 | barAddOne (MkBar n) = MkBar (n + 1)
| ^^^^^
IncorrectImport.hs
Before
module IncorrectImport where
import Foo (Bar)
barAddOne :: Bar -> Bar
barAddOne (MkBar n) = MkBar (n + 1)
After
module IncorrectImport where
import Foo (Bar(..))
barAddOne :: Bar -> Bar
barAddOne (MkBar n) = MkBar (n + 1)
Field selector exported with NoFieldSelectors
Error Message
NoFieldSelectorsExport.hs:3:35: error: [GHC-76037]
Not in scope: ‘foo’
Suggested fix:
Notice that ‘foo’ is a field selector belonging to the type ‘T’
that has been suppressed by NoFieldSelectors.
|
3 | module NoFieldSelectorsExport (T, foo) where
| ^^^
Explanation
The field selector foo has been disabled via NoFieldSelectors, therefore it cannot be a top-level export. The fix is to export it as part of its type T (consequently it can be imported for e.g. record creation or updates).
NoFieldSelectorsExport.hs
Before
{-# LANGUAGE NoFieldSelectors #-}
module NoFieldSelectorsExport (T, foo) where
data T = MkT { foo :: T }
After
{-# LANGUAGE NoFieldSelectors #-}
module NoFieldSelectorsExport (T (foo)) where
data T = MkT { foo :: T }