Перепривязка синтаксиса числовых литералов с помощью NoImplicitPrelude

Похоже, мое понимание флага -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 и определяю его равным целочисленному литералу.


person Thomas    schedule 11.09.2011    source источник


Ответы (1)


В документах, на которые вы ссылаетесь, говорится, что для этого необходимо включить расширение RebindableSyntax.

person Rotsor    schedule 11.09.2011
comment
Спасибо, мне было интересно, почему никто не спросил об этом. Думаю, мне нужна татуировка RTFM на тыльной стороне ладони. - person Thomas; 12.09.2011