標準包裝,只顯示功能返回一個字符串常量:爲什麼Text.Show.Functions只返回<function>?
λ> :m +Text.Show.Functions
λ> show (+1)
"<function>"
GHCI的:type
命令是有用得多:
λ> :t (+1)
(+1) :: Num a => a -> a
是不可能得到這樣一個在運行時的詳細程度?編譯過程是否留下任何有關函數的信息,除了它們是函數?
標準包裝,只顯示功能返回一個字符串常量:爲什麼Text.Show.Functions只返回<function>?
λ> :m +Text.Show.Functions
λ> show (+1)
"<function>"
GHCI的:type
命令是有用得多:
λ> :t (+1)
(+1) :: Num a => a -> a
是不可能得到這樣一個在運行時的詳細程度?編譯過程是否留下任何有關函數的信息,除了它們是函數?
不完全是同級別的細節,但你可以使用typeOf
從Data.Typeable:
Prelude> import Data.Typeable
Prelude Data.Typeable> typeOf (+1)
Integer -> Integer
我降低了投票率。這似乎並沒有解決問題的問題,這是關於動機而不是替代方案。 –
@DanielWagner是的,我的主要問題是對節目輸出有限的動機。 Data.Typeable很有趣,但似乎缺乏大多數函數的內建或自動實例,例如'(+1)'工作,但'const(+1)'失敗慘劇 – Tobia
@Tobia對於大多數類型,'Typeable' 。你提出的問題是多態的 - const引入了一個自由類型變量,它需要對'typeOf'進行單態。嘗試'typeOf(const(+1):: String - > Int - > Int)' –
[維基有一些信息]關於這個問題(https://wiki.haskell.org/Show_instance_for_functions)。 – gspr
@gspr謝謝。我覺得這是一個這樣的原因。但它仍不能解釋它是否理論上可輸出超過''的任何內容,如類型簽名或不是。 –
Tobia