我有一些數據,我想打印(有的也許還有一些不算),我試圖按照以下步驟創建一個通用的showField功能:特設多態函數
showField :: (Show a) => a -> Text
showField x
| isJust x = Text.pack $ show $ fromJust x
| isNothing x = "None"
| otherwise = Text.pack $ show x
這是拋出一個剛性類型的錯誤:
• Couldn't match expected type ‘Maybe a0’ with actual type ‘a’
‘a’ is a rigid type variable bound by
the type signature for:
showField :: forall a. Show a => a -> Text
at /data/users/jkozyra/fbsource/fbcode/experimental/jkozyra/hs/holdout_cleanup/HoldoutReaper.hs:244:18
• In the first argument of ‘isNothing’, namely ‘x’
In the expression: isNothing x
In a stmt of a pattern guard for
an equation for ‘showField’:
isNothing x
我大致明白這個錯誤,但如果有一種方法來實現想要什麼,我要我不明白。我也嘗試過模式匹配而不是守衛,但也不能完全解決這個問題。有沒有什麼我可以用這種格式來構建的?
可能重複的[剛性類型變量錯誤](https://stackoverflow.com/questions/4629883/rigid-type-variable-error) – jberryman
儘管錯誤匹配,我不願意將其標記爲重複;在提議的複製中對問題的解釋與這裏對問題的解釋完全不同。 –
@DanielWagner是的,我不認爲這是重複的,因爲我的問題是關於創建一個adhoc多態函數。我提供了一個錯誤來解釋我知道我寫的代碼沒有工作。 – jek339