Следующий тип программы проверяет, указываю ли я его в командной строке (например, ghci file.hs
):
import Data.Ratio
foo = let x = [1..]
y = (1%2) + (head x)
in y
Однако, если я введу его в интерактивном режиме, я получу ошибку типа:
Prelude> import Data.Ratio
Prelude Data.Ratio> let x = [1..]
Prelude Data.Ratio> let y = (1%2) + (head x)
<interactive>:1:23:
Couldn't match expected type `Ratio a0' with actual type `Integer'
Кажется, что x
охотно печатается как [Integer]
, в отличие от более общего (Num t, Enum t) => [t]
.
Могу ли я что-нибудь с этим поделать? Существуют ли другие ситуации, когда интерактивный режим будет отличаться от пакетного режима?
:set -XNoMonomorphismRestriction
и все готово; языковые прагмы и флаги компилятора также работают). - person Vitus   schedule 29.02.2012