Haskell: Gleichlange Einschränkungen von Listen im Typensystem festlegen

n Haskell habe ich oft eine Funktion wief, das eine Liste akzeptiert und eine Liste gleicher Länge zurückgibt:

f :: [a] -> [a]  -- length f(xs) == length xs

Ähnlich könnte ich eine Funktion wie @ habg, das zwei Listen mit gleicher Länge akzeptiert:

g :: [a] -> [a] -> ...

Wennf undgenn @ wie oben eingegeben wird, können Laufzeitfehler auftreten, wenn ihre längenbezogenen Einschränkungen nicht erfüllt sind. Ich möchte daher diese Einschränkungen im Typensystem kodieren. Wie könnte ich das machen?

Bitte beachten Sie, dass ich nach einem praktischen Framework suche, das in alltäglichen Situationen verwendet werden kann und dem Code so wenig intuitiven Overhead wie möglich hinzufügt. Mich interessiert vor allem, wie du mit @ umgehen würdef undg du selber; Das heißt, würden Sie versuchen, die längenbezogenen Einschränkungen zu ihren Typen hinzuzufügen, wie hier gefragt, oder würden Sie sie mit den oben angegebenen Typen belassen, um den Code zu vereinfachen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage