Каков синтаксис для ограничения аргумента функции в интерфейсе, который принимает функцию? Я попытался:
interface Num a => Color (f : a -> Type) where
defs...
Но там написано Name a is not bound in interface...
Каков синтаксис для ограничения аргумента функции в интерфейсе, который принимает функцию? Я попытался:
interface Num a => Color (f : a -> Type) where
defs...
Но там написано Name a is not bound in interface...
Ваш interface
на самом деле имеет два параметра: a
и f
. Но f
должно быть достаточно, чтобы выбрать implementation
:
interface Num a => Color (a : Type) (f : a -> Type) | f where
f
здесь называется определяющим параметрома>.
Вот бессмысленный полный пример:
import Data.Fin
interface Num a => Color (a : Type) (f : a -> Type) | f where
foo : (x : a) -> f (1 + x)
Color Nat Fin where
foo _ = FZ
x : Fin 6
x = foo {f = Fin} 5
| f
, чтобы заставить принимать решение только один, это отлично.
- person ScarletAmaranth; 23.04.2016