Первое: обычно тип времени выполнения сгенерированного кода не зависит от типа времени компиляции подвыражений Template Haskell, поэтому тип времени выполнения не обязательно должен быть в IO.
Теперьвыполните эту команду без использования unsafePerformIO, используйте runIO .Затем вам нужно будет создать Expr самостоятельно, не используя [||] (это также решает проблему типов).
На самом деле, если вы используете [||] чтобы вставить вычисление ввода-вывода, я думаю, что оно вставит только вычисление, но не запустит его.Но это не имеет значения, потому что независимо от того, что он делает, это не правильный способ делать то, что вы хотите делать.