2017-04-14 82 views
3

標準包裝,只顯示功能返回一個字符串常量:爲什麼Text.Show.Functions只返回<function>?

λ> :m +Text.Show.Functions 
λ> show (+1) 
"<function>" 

GHCI的:type命令是有用得多:

λ> :t (+1) 
(+1) :: Num a => a -> a 

是不可能得到這樣一個在運行時的詳細程度?編譯過程是否留下任何有關函數的信息,除了它們是函數?

+1

[維基有一些信息]關於這個問題(https://wiki.haskell.org/Show_instance_for_functions)。 – gspr

+0

@gspr謝謝。我覺得這是一個這樣的原因。但它仍不能解釋它是否理論上可輸出超過''的任何內容,如類型簽名或不是。 – Tobia

回答

3

不完全是同級別的細節,但你可以使用typeOfData.Typeable

Prelude> import Data.Typeable 
Prelude Data.Typeable> typeOf (+1) 
Integer -> Integer 
+0

我降低了投票率。這似乎並沒有解決問題的問題,這是關於動機而不是替代方案。 –

+0

@DanielWagner是的,我的主要問題是對節目輸出有限的動機。 Data.Typeable很有趣,但似乎缺乏大多數函數的內建或自動實例,例如'(+1)'工作,但'const(+1)'失敗慘劇 – Tobia

+2

@Tobia對於大多數類型,'Typeable' 。你提出的問題是多態的 - const引入了一個自由類型變量,它需要對'typeOf'進行單態。嘗試'typeOf(const(+1):: String - > Int - > Int)' –