簡體   English   中英

如何找出哪些(具體)類型滿足一組類型類約束?

[英]How can I find out which (concrete) types satisfy a set of typeclass constraints?

給定了一些類型類約束:

{-# 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 typecheck)來雙重檢查我的工作

isIntLike :: IntLike -> Bool
isIntLike = const True

在各種類型,例如isIntLike (3::Int)

有沒有辦法讓ghci為我這樣做?

我目前對具體類型感興趣,但是不介意有一個更通用的解決方案,它也可以通過統一的上下文來實現聰明的東西!

社區維基回答基於以下評論:

您可以使用模板haskell執行此操作。

main = print $(reify ''Show >>= stringE . show).

這對於類型同義詞不起作用 - 相反,reify返回表示類型同義詞本身的AST,而不擴展它。 您可以檢查作為約束的類型同義詞,提取該類型同義詞所包含的約束,並繼續對其進行更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM