Skip to content

Extremely slow compilation of a program with multiply implicit parameters

Adding yet another ?tstX variable in this snippet slows down compilation by a factor of ten or so. Giving an explicit type annotation to tst1 makes compilation instant.

{-# LANGUAGE ImplicitParams #-}

data D = D Int deriving Show

slow_to_compile :: IO ()
slow_to_compile = do
  tst1 <- return 1

  let ?tst1 = tst1
  let ?tst2 = tst1
  let ?tst3 = tst1
  let ?tst4 = tst1
  let ?tst5 = tst1
  let ?tst6 = tst1
  let ?tst7 = tst1

  print $ D ?tst1
Edited by Simon Peyton Jones
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information