[英]What does declaration group mean in context monomorphism restriction?
想象一個程序
foo x =
let f n = g (n-1)
g n = f (n-2)
h n = 42*n
in
f (h x)
在這里, f
和g
形成相互依賴的綁定的最小集合。
他們不依賴於h
,也沒有h
依賴於任何人。 因此我們可以將其重寫為
foo x =
let h n = 42*n in
let f n = g (n-1)
g n = f (n-2)
in
f (h x)
但是我們無法分解f
和g
的組-它們必須在一起,因為它們每個都指向另一個。
在這里, f
和g
綁定都是函數綁定,因此不受限制 ,但是如果我們在那里有g = \\n -> f (n-2)
,則意味着g
的綁定是簡單的模式綁定,並且兩者 f
a g
將受到單態性限制。
我們可以說h, f, g
是一組綁定,但這並不是最小的,因為我們可以將h
從該組中刪除。 只有當我們不再拿出任何名稱時,我們才有了最小(即最小的大小)組。 因此,如果我們重寫g = \\n -> f (n-2)
,則即使f
的bindind為a, g
仍將成為簡單的模式綁定,受到限制,並且f
將受到限制。功能綁定。 但是h
仍然不受影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.