GHC 7.4 ломает обновление haskell98? - PullRequest
12 голосов
/ 04 марта 2012

Я обновил 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)

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

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

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

РЕДАКТИРОВАТЬ: я обновил версию на github, чтобы отразить эту ошибку.и фактически используя Data.List ghc прекрасно компилирует файл, так что именно runhaskell создает эту проблему ..

Ответы [ 3 ]

14 голосов
/ 04 марта 2012

Вам нужно не только изменить 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.

6 голосов
/ 04 марта 2012

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

ghc -package haskell98 -hide-package base

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

2 голосов
/ 04 марта 2012

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

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

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

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

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

...