Skip to content

HIE evidence for ToJSON instances derived using DeriveAnyClass don't rely on Generic evidence

Summary

HIE files in GHC 9 onwards contain evidence for type class dictionaries. However, this evidence chain doesn't seem complete when we look at instances that are derived using DeriveAnyClass, default methods, and Generics.

Steps to reproduce

Compile the following with -fwrite-ide-info:

{-# language DeriveAnyClass #-}
{-# language DeriveGeneric #-}

module Test where

import Data.Aeson
import GHC.Generics ( Generic )

data T = MkT { fieldName :: Bool }
  deriving (Generic, ToJSON, FromJSON)

Next, load the resulting .hie file with hiedb dump and search the pretty-printed tree for Generic. You should find $dGeneric and $dToJSON symbols, but no connection between them. This seems to suggest that the ToJSON T instance doesn't depend on the Generic T instance, but that's incorrect.

Expected behavior

The evidence for ToJSON T should mention the evidence for Generic T.

Environment

  • GHC version used: 9.0.1
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information