賦予了許多類型類的約束:如何找出哪些(具體)類型滿足一組類型約束?
{-# LANGUAGE ConstraintKinds, MultiParamTypeClasses #-}
import Data.Array.Unboxed(Ix,IArray,UArray)
type IntLike a = (Ord a, Num a, Enum a, Show a, Ix a, IArray UArray a)
我如何可以找出哪些類型滿足IntLike
,即所有上述約束聯合?
我可以在各種類型的,例如砌起來從ghci中的:info
命令的輸出所需要的信息,然後通過調用(或具有ghci的類型檢測)雙檢我的工作
isIntLike :: IntLike -> Bool
isIntLike = const True
。
有沒有辦法讓ghci爲我做這件事?
我目前對混凝土類型感興趣,但並不介意有一個更一般的解決方案,它也可以用統一的上下文來做聰明的事情!
你可以使用模板haskell來做到這一點:'main = print $(reify''Show >> = stringE。show)'。這不適用於類型同義詞 - 相反,reify返回代表類型同義詞本身的AST,而不擴展它。您可以檢查是約束的類型同義詞,提取該類型同義詞所包含的約束條件,並繼續進行這些約定。 – user2407038 2014-10-30 06:54:51
對,這似乎包含我需要去交點的所有信息,謝謝!我會盡我所能,但我不得不說,黑客GHCi似乎更實際:-) – yatima2975 2014-10-31 01:20:30
@ user2407038你可以把這個評論變成一個答案,因爲我認爲已經回答了qeustion? – sclv 2015-02-20 04:24:03