{-# LANGUAGE PolyKinds #-}

module Torch.GraduallyTyped.Internal.Void where

{-
  Note [Uncluttering type signatures]
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Because various instances in this library are wrappers of constraint synonyms,
  GHC replaces them with their constraints, which results in large, unreadable types.
  Writing an (overlapping instance) for the 'Void' type means that the original
  instance might not be the one selected, thus GHC leaves the constraints in
  place until further information is provided, at which point the type
  machinery has sufficient information to reduce to sensible types.
  This solution has been adapted from Csongor Kiss and his generic-lens library, see
  https://kcsongor.github.io/opaque-constraint-synonyms/.
-}
data Void