2012-03-04 11 views
12

zaktualizowałem GHC dzisiaj i mój mały program przestał działać:Aktualizacja aktualizacji GHC 7.4 haskell98?

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

GHC jest wersja 7.4.1-2 i od tego, co udało mi się go zrozumieć teraz domyślne do haskell2010 standard, zamiast haskell98. (Jak widzę z wyjścia listy ghc-pkg):

haskell2010-1.1.0.1 
(haskell98-2.0.0.1) 

Więc zmieniłem „Lista importu” na „import Data.List”, co moim zdaniem było jedynym problemem, ale teraz pojawia się następujący :

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

skąd to się bierze, ponieważ nigdy nie importuję System.Environment? Dowolna podpowiedź? Dzięki

EDYCJA: Zaktualizowałem wersję na github, aby odzwierciedlić ten błąd. i faktycznie używając Data.List ghc kompiluje plik idealnie, więc jest to runhaskell, który generuje ten problem ..

+1

Czy próbowałeś skompilować z 'ghc -XHaskell98'? – nominolo

+0

ta opcja nie istnieje na moim ghc, faktycznie szukałem czegoś podobnego .. –

Odpowiedz

14

Nie trzeba tylko zmienić List do Data.List, ale także Random do System.Random i importować getArgs z System.Environment (ale w tej chwili, kod wykorzystuje ani getArgs ani niczego od System.Random, więc na razie, można również usunąć te import).

Stare niehierarchiczne moduły są dostępne tylko z pakietu haskell98, który nie jest już zgodny z base. Oznacza to, że używanie modułów haskell98 wymaga również jawnego ukrywania base w wierszu poleceń lub niewpisania wartości base w polu zależności pliku .cabal.

jestem trochę zaskoczony przez komunikat o błędzie, spodziewałbym to znaczy

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

jednak, że różnica może być kaprys runhaskell.

+0

Przepraszam wersja, która była pod linkiem, nie jest taka sama, nad którą pracowałem, pchnąłem aktualną wersję na github i to powoduje, że wyświetlany jest wcześniej wyświetlany błąd. –

+0

To dziwne. Nie otrzymuję żadnych błędów podczas uruchamiania nowej wersji z Runhaskell lub bezpośrednio z powłoki i nie ma powodu dla tego błędu w pliku. Co zawiera raport "runhaskell --version"? Nie oczekuję niczego poza 'runghc 7.4.1', ale chciałbym się upewnić. –

+0

Tak, dostaję dokładnie tę wersję, właśnie wypróbowałem na innej maszynie z poprzednią wersją GHC, i wszystko działa dobrze ... Może po prostu spróbuję ponownie zainstalować wszystkie pakiety związane z haskellami na moim Archlinuksie i sprawdzić, czy to działa . –

2

Po pierwsze, myślę, że używasz System.Environment.withArgs z powodu getArgs, który używa withArgs. Hackage.Haskell page for System.Environment

Spróbuj również importować withArgs, a może cały System.Environment.

Po drugie, może się zdarzyć, że teraz masz już ponad List więcej niż Data.List. Możesz spróbować dodać cały Prelude zamiast tylko Data.List.

Aby odpowiedzieć na pytanie w nagłówku, każda aktualizacja GHC rozszerza Haskell98. A niektóre pragma językowe nawet hamują pewne szczegóły Haskell98. Ale głównie zmiany w bibliotekach powodują problemy, a nie same aktualizacje GHC.

Mam nadzieję, że dałem ci wystarczająco dużo, aby rozwiązać problemy.

+0

Jak napisałem powyżej te rzeczy nie są już problemem, a program kompiluje dobrze, że błąd pochodzi z runhaskell .. –

6

Jeśli program jest czysta Haskell98 można użyć następującego GHC invokation:

ghc -package haskell98 -hide-package base 

W dłuższej perspektywie jednak, że byłoby lepiej, jeśli uaktualniony co najmniej do hierarchicznych nazw modułów. Użyj Hoogle, aby znaleźć nazwę modułu. Np., http://www.haskell.org/hoogle/?hoogle=withArgs wylicza System.Environment jako moduł eksportu.