Diese Frage ist eine theoretische Frage zu Haskell-Funktionen, die Argumente jeglicher Art annehmen können. Gibt es einen Unterschied zwischen der Funktionsweise mit den Typensignaturen von
a -> b -> a
und
c -> a -> c
instanziiert werden? Jede Hilfe wird geschätzt.
haskell
functional-programming
Dreana
quelle
quelle
Antworten:
Es gibt keinen Unterschied. Da
a
,b
undc
mit einem Start Klein , sind diese Variablen . Sie können Variablen umbenennen, und dies bleibt gleich, solange zwei (oder mehr) Variablen nicht " zusammenstoßen ".Solche Konflikte können auftreten, wenn Sie eine Variable so umbenennen, dass sie denselben Namen wie eine andere Variable hat, oder wenn Sie zwei (oder mehr) Variablen in denselben neuen Namen umbenennen. Wenn Sie die Variable
a
beispielsweiseb
in Ihrem ersten Codefragment umbenennen würden, würden wir erhaltenb -> b -> b
, aber das ist nicht dasselbe, da wir dann erzwingen, dass der erste und der zweite Parameter vom gleichen Typ sind. Während wir in Ihrer Typensignatur die Freiheit haben, zwei Typen auszuwählen, die gleich sein können, ist dies jedoch nicht erforderlich.quelle
Nee. Denken Sie an
a -> b -> a
alsThis Type -> Another Type -> This Type
. Dann passen beide zum gegebenen Muster. Etwasa -> b -> c
passt jedoch nicht:This Type -> That Type -> Yet Another Type
ist (im Allgemeinen) anders; außer dem Randfall wannc = a
, der das Muster ergibt, an dem Sie interessiert sind.quelle