Unticked promoted constructors [GHC-49957]

Flag: -Wunticked-promoted-constructors

Language extension: DataKinds

When using a datatype as a kind, its constructors become types. Because Haskell has separate namespaces for data constructors and type constructors, this can lead to ambiguities. These ambiguities can be resolved by prefixing the constructor’s name with a tick mark ('). To avoid potential ambiguities in the future, the flag -Wunticked-promoted-constructors can require that all promoted constructors have tick marks.

Examples

Unticked promoted constructor

Warning

Unticked.hs:5:10: warning: [-Wunticked-promoted-constructors] [GHC-49957]
    Unticked promoted constructor: True.
    Suggested fix: Use 'True instead of True.
  |
5 | type A = True
  |          ^^^^

Explanation

True is a data constructor for type Bool. Here, it is used in a type synonym, which implicitly promotes it to a type constructor of kind Bool. The warning can be resolved by adding the tick mark.

Unticked.hs
Before
{-# LANGUAGE DataKinds #-}
{-# OPTIONS_GHC -Wunticked-promoted-constructors #-}
module Unticked where

type A = True
After
{-# LANGUAGE DataKinds #-}
{-# OPTIONS_GHC -Wunticked-promoted-constructors #-}
module Unticked where

type A = 'True