簡體   English   中英

eta縮減何時可以更改函數的類型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM