多型代理習語
由於 Proxy
不包含執行時資訊,因此無需在 Proxy
建構函式上進行模式匹配。因此,一個常見的習慣是使用型別變數抽象 Proxy
資料型別。
showread::forall proxy a. (Show a, Read a) => proxy a -> String -> String
showread _ = (show::a -> String) . read
現在,如果你碰巧在一些 f
的範圍內有一個 f a
,你在呼叫 f
時不需要寫出 Proxy::Proxy a
。
ghci> let chars = "foo" -- chars :: [Char]
ghci> showread chars "'a'"
"'a'"