{-# LANGUAGE TemplateHaskell #-} import System.Directory import Language.Haskell.TH do secretNumber <- runIO $ length <$> listDirectory "." let name = mkName $ "SecretIs" <> show secretNumber pure <$> dataD (cxt []) name [] Nothing [] [] proofIHaveIt :: SecretIs3 -> Bool proofIHaveIt _ = True main :: IO () main = pure ()