2015-08-25 37 views
5

Dostaję parse error on input ‘where’ podczas próby następujący przykład w GHC 7.10.2:ghc 7.10.2 typ rodziny rozszerzenie nie działa

{-# LANGUAGE TypeFamilies #-} 

type family F a :: * 
type instance where 
    F (Maybe Int) = Int 
    F (Maybe Bool) = Bool 
    F (Maybe a) = String 

Same question was asked two years ago about GHC 7.4.2.

Użyłem rodzin typu dobrze z GHC 7.6. * (Nie pamiętam ostatniej cyfry) w tym roku. Czy to jest problem z GHC 7.10.2?

Dostępne są rodziny typów według the User's Guide.

Mój GHC 7.10.2 i cabal 1.22.6.0 gdzie zainstalowany od this PPA.

+0

możliwe duplikat [typ rodzin rozszerzenie nie działa zgodnie z opisem] (http://stackoverflow.com/questions/16338175/type-families-extension-does-not-work-as- opisane) – Bakuriu

Odpowiedz

8

Nie można mieszać składni rodziny typu otwartego i zamkniętego w ten sposób i nie jestem pewien, skąd bierze się ten pomysł. Poprawna składnia jest

type family F a :: * where 
    F (Maybe Int) = Int 
    F (Maybe Bool) = Bool 
    F (Maybe a) = String 
+0

Rzeczywiście, dzięki :) – wowofbob

+2

Najwyraźniej składnia OP * została * zaimplementowana na jakiś czas (w HEAD, nie w żadnej wydanej wersji), ale [kwestie techniczne] (https://ghc.haskell.org/trac/ghc/ wiki/NewAxioms/ClosedTypeFamilies) doprowadziły do ​​tego, że został wycofany i zastąpiony przez [bieżącą wersję rodziny tylko zamkniętych typów] (https://ghc.haskell.org/trac/ghc/wiki/NewAxioms). –