簡體   English   中英

類型上的模式匹配

[英]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 babTypeable字典中提取運行時類型信息並進行比較; 如果ab是相同的類型,則返回Just其參數,否則失敗。

所以,有了castMaybeAlternative實例,我們有:

h x = f <$> cast x
  <|> g <$> cast x

據我所知,有沒有辦法避免重復調用cast ,因為它們發生在不同的類型。

暫無
暫無

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

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