Предположим, что я закодировал натуральные числа в типах Haskell и что у меня есть способ их добавления и вычитания:
data Zero
data Succ n
-- ...
Я видел различные биты кода, которые создают появление вариационных функций, таких как this, что позволяет:
buildList "polyvariadic" "function" "wut?" :: [String]
-- ["polyvariadic","function","wut?"]
Я задаюсь вопросом, смогу ли я это сделать, чтобы создать функцию, которая будет принимать только количество аргументов, соответствующих экземпляру номера типа. То, что я пытаюсь сделать, будет выглядеть примерно так:
one = Succ Zero
two = Succ one
three = Succ two
threeStrings :: String -> String -> String -> [String]
threeStrings = buildList three
threeStrings "asdf" "asdf" "asdf"
-- => ["asdf","asdf","asdf"]
threeStrings "asdf"
-- type checker is all HOLY CHRIST TYPE ERROR
threeStrings "asdf" "asdf" "asdf" "asdf"
-- type checker is all SWEET JESUS WHAT YOU ARE DOING
Я знаю, что это довольно глупо и что это, вероятно, пустая трата времени, но казалось, что это будет весело для выходных.