<div dir="ltr"><div>No answer on -beginners, so I'm trying -cafe.</div><div><br></div><div>I'm trying to run interpreted code via ClassyPrelude, and getting some results that make me suspect a bug in the Prelude's type system. Or maybe the interpreter.</div><div><br></div><div>Anyway, here's a bit of code that works as expected:</div><div><br></div><div>{-# LANGUAGE NoImplicitPrelude #-}</div><div><br></div><div>import ClassyPrelude</div><div>import Language.Haskell.Interpreter</div><div><br></div><div>main :: IO ()</div><div>main = do</div><div>  fun <- runInterpreter $ makeFun "reverse"</div><div>  case fun of</div><div>   Left e -> print e</div><div>   Right f -> readFile "/etc/motd" >>= hPut stdout . f</div><div><br></div><div><br></div><div>makeFun expr = do</div><div>  set [languageExtensions := [NoImplicitPrelude]] </div><div>  setImportsQ [("ClassyPrelude", Nothing)]</div><div>  interpret expr (as :: Text -> Text)</div><div><br></div><div><br></div><div>I don't think I can simplify this any further. It works as expected, and also works as expected, and prints out the contents of /etc/motd reversed.</div><div><br></div><div>However, if you change the type signature in the last line from Text -> Text to LText -> Ltext (to get lazy text), you get no output. But if you change the function in the first line after main from "reverse" to "id", it works.</div><div><br></div><div>So far, it might be an issue with lazy IO. However, change the type signature in the last line to LText -> Text. In this case, there is no output for either value of the expression.  I expect an error in this case, as neither id nor reverse should be able to have the type LText -> Text!</div><div><br></div><div>So, is there something I missed in either ClassyPrelude or the Interpreter? Or is this a subtle interaction, in which case can someone suggest a workaround? Or have I found a bug in one of the two?</div><div><br></div></div>