Перепривязка синтаксиса числовых литералов с NoImplicitPrelude - PullRequest
4 голосов
/ 11 сентября 2011

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

1 Ответ

4 голосов
/ 11 сентября 2011

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

...