im folgenden Code der Suche:Ist es üblich, denselben Namen für den Datentyp und den Wertkonstruktor in Haskell zu verwenden?
data Point = Point Float Float deriving (Show)
data Shape = Circle Point Float | Rectangle Point Point deriving (Show)
, die aus dem Buch ein Haskell für viel Gutes Lernen Sie, die mit dem folgenden Text, um dieses Codebeispiel begleitet:
Beachten Sie, dass, wenn ein Punkt definiert, , wir haben den gleichen Namen für den Datentyp und den Wertkonstruktor verwendet. Dies hat keine besondere Bedeutung, obwohl es üblich ist, denselben Namen wie den Typ zu verwenden, wenn es nur einen Wertkonstruktor gibt.
Jetzt ist meine Vermutung ist, dass data Point = ...
der Datentyp ist, und ... = Point Float...
ist der Wert Konstruktor.
Meine Frage ist: Ist es üblich, den gleichen Namen für den Datentyp und Wert Konstruktor in Haskell zu verwenden?
Ja, es ist. Wir verwenden jedoch normalerweise 'newtype' anstelle von' data'. Zum Beispiel wird 'State' normalerweise wie folgt definiert:' newtype State s a = Zustand {runState :: s -> (a, s)} '. –
@AaditMShah Das funktioniert nur für einzelne Feldkonstruktoren. Wenn Sie nicht jedes Mal ein Tupel entpacken wollen, können Sie 'newtype' nicht für den erwähnten' Point' verwenden. – Zeta
ich mir einmal darauf hingewiesen, als ich Haskell zu jemand zu erklären, dass in einigen Sprachen (zum Beispiel Java), der Konstruktor * immer * denselben Namen wie der Art hat. Für jemanden, der zu Haskell kommt, kann es verwirrend sein, verschiedene Konstruktornamen zu haben. – user2297560