[英]Pattern matching on types
有沒有很好的方法來寫下面的“x是t型”部分? (我懷疑我應該使用Data.Type.Equality,但我不確定如何)
f :: a -> Int
g :: b -> Int
h :: Typeable t => t -> Maybe Int
h x = case x of
(x is of type a) -> Just (f x)
(x is of type b) -> Just (g x)
_ -> Nothing
這是Data.Typeable
的“類型安全轉換”位的Data.Typeable
。 cast :: (Typeable a, Typeable b) => a -> Maybe b
從a
和b
的Typeable
字典中提取運行時類型信息並進行比較; 如果a
和b
是相同的類型,則返回Just
其參數,否則失敗。
所以,有了cast
和Maybe
的Alternative
實例,我們有:
h x = f <$> cast x
<|> g <$> cast x
據我所知,有沒有辦法避免重復調用cast
,因為它們發生在不同的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.