[英]When can eta reduction change a function's type?
以下內容到底是怎么回事?
> let test = map show
> :t test
test :: [()] -> [String]
> :t (map show)
(map show) :: Show a => [a] -> [String]
我想知道我以前怎么沒注意到? 我實際上遇到了“ map fromIntegral”問題,而不是顯示問題-我的代碼無法使用無點格式編譯,但是可以在不減少eta的情況下正常工作。
關於eta減少何時可以更改Haskell代碼的含義是否有簡單的解釋?
從理論上講,這是單態性限制 ,適用於綁定不帶參數的情況,並允許綁定在其他情況下不是由於多態引起的可共享的,因為如果您不給它提供參數,則理論上將其視為“恆定”的東西(因此是共享的)。 您可以在ghci
使用:set -XNoMonomorphismRestriction
禁用它; 這在ghci
通常很有用,在ghci
,您經常希望此類表達式是完全多態的。 (在Haskell源文件中,第一行
{-# LANGUAGE NoMonomorphismRestriction #-}
代替。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.