Not in Scope: Data Constructor?

I am new to haskell. I am getting this problem :

Assignment12.hs:5:12: Not in scope: data constructor `Suit'

Assignment12.hs:5:18: Not in scope: data constructor `Rank'

Assignment12.hs:6:11: Not in scope: data constructor `Rank'

Assignment12.hs:7:11: Not in scope: data constructor `Rank'

Assignment12.hs:8:11: Not in scope: data constructor `Otherwise' Failed, modules loaded: none.

This is my code :

data Suit = Clubs | Diamonds | Hearts | Spades deriving (Show, Eq)
data Rank = Jack | Queen | King | Ace | Num Int deriving (Show, Eq)
type Card = (Suit, Rank)
cardValue :: Card -> Int
cardValue (Suit, Rank)
     | Rank == Ace = 11
     | Rank == Ace = 11
     | Rank == Jack = 10
     | Otherwise = Num

I really appreciate your help. Thanks

1

1 Answer

In haskell variable names must start with a lowercase letter. Anything that is uppercase is interpreted by the compiler as a Data Constructor which is why you are getting that error.

When you define cardRank the variables (suit, rank) must start with lowercase letters for your code to compile.

This should work

data Suit = Clubs | Diamonds | Hearts | Spades deriving (Show, Eq)
data Rank = Jack | Queen | King | Ace | Num Int deriving (Show, Eq)
type Card = (Suit, Rank)

cardValue :: Card -> Int
cardValue (suit, rank)
     | rank == Ace = 11
     | rank == Ace = 11
     | rank == Jack = 10
cardValue (suit, Num x) = x
2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Chloe Bennett

Chloe Bennett

Culture, Media & Entertainment Columnist

Chloe Bennett explores the intersection of pop culture, streaming entertainment, digital trends, and contemporary lifestyle. Her weekly commentary reaches thousands of culture enthusiasts.

Share this article
Twitter Facebook Pinterest