Haskell: Задание ограничений одинаковой длины для списков в системе типов

В Хаскеле у меня часто есть такая функцияf, который принимает список и возвращает список равной длины:

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

Точно так же я мог бы иметь такую ​​функциюg, который принимает два списка, которые должны быть одинаковой длины:

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

Еслиf а такжеg набираются, как указано выше, тогда могут возникать ошибки времени выполнения, если их ограничения по длине не выполняются. Поэтому я хотел бы закодировать эти ограничения в системе типов. Как я могу это сделать?

Обратите внимание, что я ищу практическую среду, которая может использоваться в повседневных ситуациях, добавляя как можно меньше интуитивных накладных расходов в код. Мне особенно интересно узнать, как вы будете иметь дело сf а такжеg сам; то есть, попытаетесь ли вы добавить ограничения, связанные с длиной, к их типам, как указано здесь, или оставить их с типами, указанными выше, для простоты кода?

Ответы на вопрос(2)

Ваш ответ на вопрос