Nach this tutorial, ich habe den folgenden Code:Typ-Ebene Peano Zahlen und UndecidableInstances
{-# LANGUAGE DataKinds, TypeFamilies #-}
data Nat = Z | S Nat
type family Plus (n :: Nat) (m :: Nat) :: Nat
type instance Plus Z m = m
type instance Plus (S n) m = S (Plus n m)
So weit so gut. Ich weiß, dass DataKinds
automatische Förderung von Typen zu Arten, und TypeFamilies
aktivieren Sie Funktionen auf Typenebene.
Dann füge ich:
type family Mul (m :: Nat) (n :: Nat) :: Nat
type instance Mul Z m = Z
type instance Mul (S n) m = Plus m (Mul n m)
compilieren gibt mir:
Nested type family application
in the type family application: Plus m (Mul n m)
(Use UndecidableInstances to permit this)
In the type instance declaration for ‘Mul’
Der Name dieser Erweiterung ist beängstigend. Manche Leute sagen zu avoid es, und Erklärungen dieser Erweiterung, die ich versucht habe zu lesen, machen keinen Sinn für mich.
die Suche nach einem wenig Hilfe in den Fehler zu verstehen, warum es in diesem Beispiel zeigt mich, was ist der Sinn des unentscheidbar in diesem Zusammenhang und in welchen Fällen diese Erweiterung so beängstigend ist, wie es klingt?
Danke für die Erklärung. Können Sie näher erläutern, warum im Beispiel UndecidableInstances gilt? – rityzmon
Die Fehlermeldung sagt es: "verschachtelte Typ Familienanwendung", in unserem Fall der 'Mul' Aufruf innerhalb der' Add' Anwendung. Sie können in [the docs] (https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/type-class-extensions.html#undecidable-instances) sehen, dass solche Dinge nicht erlaubt sind Standard. –