Можно вернуть тип в функцию в Idris, например
t : Type -> Type -> Type
t a b = a -> b
Но возникла ситуация (при экспериментировании с написанием некоторых парсеров), что я хотел использовать ->
для сворачивания списка типов, то есть
typeFold : List Type -> Type
typeFold = foldr1 (->)
Чтобы typeFold [String, Int]
дал String -> Int : Type
. Это не скомпилировано:
error: no implicit arguments allowed
here, expected: ")",
dependent type signature,
expression, name
typeFold = foldr1 (->)
^
Но это прекрасно работает:
t : Type -> Type -> Type
t a b = a -> b
typeFold : List Type -> Type
typeFold = foldr1 t
Есть ли лучший способ работы с ->
, и если нет, то стоит ли его поднимать как запрос функции?