Похоже, мое понимание флага -XNoImplicitPrelude в ghci неверно, и я очень смущен этим.
В документации говорится
Целочисленный литерал 368 означает "fromInteger (368::Integer)", а не "Prelude.fromInteger (368::Integer)".
Однако, когда я загружаю этот код:
{-# LANGUAGE NoImplicitPrelude #-}
module Try where
import Prelude (Float,Integer, realToFrac)
data MyNum = Nummy Float
fromInteger :: Integer -> MyNum
fromInteger x = Nummy (realToFrac x)
В ghci я получаю следующее:
~/tmp$ ghci -XNoImplicitPrelude try.hs
[1 of 1] Compiling Try ( try.hs, interpreted )
Ok, modules loaded: Try.
*Try> 4
4
Когда я ожидаю получить:
*Try> 4
Nummy 4.0
*Try>
Подобные вещи происходят из модуля Try; например, возникает ошибка типа, когда я объявляю возвращаемый функцией тип MyNum и определяю его равным целочисленному литералу.