Похоже, мое понимание флага -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
Когда я ожидаюget:
*Try> 4
Nummy 4.0
*Try>
Подобные вещи происходят из модуля Try;например, возникает ошибка типа, когда я объявляю функцию, возвращающую тип MyNum, и определяю ее как целочисленный литерал.