在接受函数的接口中约束函数参数的语法是什么?我试过了:
interface Num a => Color (f : a -> Type) where
defs...
但它说的是Name a is not bound in interface...
答案 0 :(得分:5)
您的interface
实际上有两个参数:a
和f
。但是f
应该足以选择implementation
:
interface Num a => Color (a : Type) (f : a -> Type) | f where
f
此处称为determining parameter。
这是一个荒谬的完整例子:
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