Здесь - полные правила, но в качестве быстрого примера, если A
- это трехмерный массив с типом 'a list list list
и f
функцией с типом 'a list -> 'b
, я бы хотел функция map'
, которая принимает лифты f
для ввода 'a list list list -> 'b list list
. Для конкретного примера map'
будет эквивалентен этому коду:
fun map' fList aListListList = map (fn aListList => map fList aListList) A
За исключением, конечно, я бы хотел, чтобы этот map'
работал независимо от того, сколько измерений было A
. У меня проблемы с написанием сигнатуры типа, что часто является признаком того, что я делаю это неправильно.
edit : Как это можно обойти?
fun map' levels f A =
if levels < 1
then return f(A)
else return map' (levels - 1) f A