在singletons包中,函数具有以下奇怪的类型签名:
withKnownNat :: Sing n -> (KnownNat n => r) -> r。
KnownNat n =>上下文不是在:: (hasType)符号之后,而是在第二个函数参数:-> (KnownNat n => r) ->中。
我怎么看这个签名?这到底是什么意思?文件记录在哪里?
如我所知,如果int变量(值类型)直接在类(引用类型)中声明,则在堆上分配的变量的内存。
但是,如果类中有一个方法,并且变量是在方法中声明的,或者是一个参数,则在堆栈上分配的内存。
public class A
{
int x; // heap
public void Func(int y) // stack
{
int z; // stack
}
}
我怎么看,内存分配在哪里?