2017-06-30 2 views
2

Dieser einfache Code nichtArt Familie Parameter zwingt die Art zu haben *

import Data.Kind 
type family F (k :: Type) :: (t :: k) -> Type 

Die Fehlermeldung ist

• Expected a type, but ‘t’ has kind ‘k’ 
• In the kind ‘(t :: k) -> Type’ 

ich in gewissem Sinne bekommen nicht kompiliert, dass dies definiert tatsächlich eine „Familie von schreiben Familien ", aber ich verstehe nicht wirklich, warum diese Einschränkung existieren würde.

type family F (k :: Type) (t :: k) :: Type 

funktioniert, aber es hat nicht die gleiche Semantik und kann nicht das gleiche verwendet werden.

+0

Sind nicht Dinge auf der rechten Seite der '' 'für eine Art Familie Arten? Also würde der erste sagen: "kind t hat sort k", während der zweite sagt "typ t hat kind k"? –

+0

Mit TypeInType ist alles gleich. –

+0

Vielleicht 'Typ Familie F (k :: Typ) :: k -> Typ ist näher an was Sie wollen? – chi

Antwort

3

Im resultierenden Typ muss t nicht benannt werden. Sie können einfach verwenden

type family F (k :: Type) :: k -> Type 
Verwandte Themen