Подтвердить что ты не робот

Обновление GHC 7.4 обновляется haskell98?

Я обновил ghc сегодня, и моя небольшая программа перестала работать:

https://github.com/BrisFunctional/misere-oxo/blob/master/OXO/misere.hs

GHC теперь является версией 7.4.1-2 и из того, что мне удалось понять, теперь по умолчанию к стандарту haskell2010, вместо haskell98. (как я вижу из вывода списка ghc-pkg):

haskell2010-1.1.0.1
(haskell98-2.0.0.1)

Итак, я изменил свой "список импорта" на "import Data.List", который, как я думал, был единственной проблемой, но теперь я получаю следующее:

 misere.hs:1:1: Not in scope: `System.Environment.withArgs'

откуда это происходит, поскольку я даже не импортирую System.Environment? Любой намек? Благодаря

EDIT: Я обновил версию на github, чтобы отразить эту ошибку. и на самом деле использование Data.List ghc прекрасно компилирует файл, поэтому он запускает эту проблему..

4b9b3361

Ответ 1

Вам нужно не только изменить List на Data.List, но также Random на System.Random и импортировать getArgs из System.Environment (но на данный момент код не использует ни getArgs, ни что-либо из System.Random, поэтому пока вы также можете удалить их).

Старые неиерархические модули доступны только из пакета haskell98, который больше не совместим с base. Это означает, что использование модулей haskell98 также требует явно скрытия base в командной строке или не перечисления base в поле зависимостей файла .cabal.

Я немного удивлен сообщением об ошибке, я ожидаю, что он скажет

Could not find module `System'
It is a  member of the hidden package `haskell98-2.0.0.1'.

но эта разница может быть причудой runhaskell.

Ответ 2

Если ваша программа чистая Haskell98, вы можете использовать следующую GHC-интрокацию:

ghc -package haskell98 -hide-package base

В долгосрочной перспективе было бы лучше, если бы вы обновили хотя бы иерархические имена модулей. Используйте Hoogle, чтобы узнать название модуля. Например, http://www.haskell.org/hoogle/?hoogle=withArgs перечисляет System.Environment в качестве экспортирующего модуля.

Ответ 3

Во-первых, я думаю, что вы используете System.Environment.withArgs из-за getArgs, который использует withArgs. Страница Hackage.Haskell для System.Environment

Попробуйте импортировать withArgs и, возможно, целую System.Environment.

Во-вторых, теперь может иметь место List больше, чем Data.List. Возможно, вы захотите включить весь Prelude вместо Data.List.

И чтобы ответить на вопрос в заголовке, каждое обновление GHC расширяет Haskell98. И некоторые языковые прагмы даже тормозят некоторые особенности Haskell98. Но в основном изменения в библиотеках вызывают проблемы, а не сами обновления GHC.

Надеюсь, я дал вам достаточно, чтобы решить проблемы.