(displayS $ renderPretty 0.8 80 $ _errDoc ei <> linebreak) ""
爲什麼我不能
show $ displayS $ renderPretty 0.8 80 $ _errDoc ei <> linebreak
(displayS $ renderPretty 0.8 80 $ _errDoc ei <> linebreak) ""
爲什麼我不能
show $ displayS $ renderPretty 0.8 80 $ _errDoc ei <> linebreak
你不能show $ displayS blah
因爲ShowS
不是Show
一個實例。回想一下,
type ShowS = String -> String
所以如果我們想的Show
一個實例,我們會寫:
instance Show (String -> String) where
show f = ...
而現在我們有一個有點問題。畢竟,我們能用f
這個函數做的唯一事情就是用String
參數來調用它。有這麼映入腦海隨手一對夫婦的選擇,但他們每個人都有缺點:
f
行爲。這不會奏效 - 它有無數的輸入。閱讀和理解無限的輸出將需要很長時間。f
。選取一個String
作爲show
的輸出,如show f = "<it's a function, lol>"
中的輸出。這不是非常有用,因爲它實際上沒有給你任何有關f
的信息。f
,並帶有顯着的字符串""
。這是沒有用的,因爲有很多不同的函數會爲該輸入提供相同的輸出,您將無法區分它們。 (也許碰巧你的圖書館用於烹飪ShowS
值不會有這個問題,但是如果我們要有實例,它應該適用於來自任何地方的值,而不僅僅是值的一小部分! )由於這些考慮因素,函數Show
的實例不包含在標準庫中,儘管方法(1)和(2)可用於從Hackage進行安裝。
有沒有任何函數'showsToString'? – bjornmelgaard
我覺得這有點不公平。當然,類型'String - > String'允許函數檢查參數,但'ShowS'類型的想法是它將字符串表示爲差異列表,並且約定參數是剩餘的字符串而不被查看。這可能不會在類型級別上顯現,並且Haskell類型系統的限制可以防止'instance Show ShowS',但對於ShowS'的任何「守法」值,方法3都是明智的。 –
@bjornmelgaard您已經使用過它:'showsToString f = f「」'。這很簡單,甚至不值得給一個名字。 –
你不能對它進行美化,它開始並不醜陋! –
因此,給它空字符串是正常的行爲,因爲DList有功能,所以要求問'toList dl = unDL dl []' – bjornmelgaard
將'ShowS'轉換爲'String'的規範函數是'($「」)'。你還需要什麼? – dfeuer