[英]Check if it is a specific type - haskell
我認為在網上找到答案真的很容易,但是我對此並不走運。 這意味着我的問題不應該是一個問題,但是我敢肯定,更多對Haskell陌生的人可能會提出相同的問題。
那么,如何檢查某個值是否屬於某種類型?
我定義了以下數據類型,我想檢查函數的輸入是否為特定類型。
data MyType a = MyInt Int | MyOther a (MyType a)
首先,您的data
聲明將不起作用。 假設您使用的是這種類型:
data MyType a = MyInt Int | MyOther a (MyType a)
那么您可以使用采用MyType a
,某些特定MyType
(例如MyType Int
)或受約束的MyType
(例如Num a => MyType a
) Num a => MyType a
。
如果你想知道你是否有一MyInt
或MyOther
,你可以簡單地使用模式匹配:
whichAmI :: MyType a -> String
whichAmI (MyInt i) = "I'm an Int with value " ++ show i
whichAmI (MyOther _ _) = "I'm something else"
當您想知道參數a
的類型是Num
還是什么類型時,就會遇到基本的Haskell限制。 Haskell是靜態類型的,因此無法對MyType a
的a
進行動態檢查。
解決的辦法是,如果你需要某種類型的限制你的功能a
。 例如,我們可以有:
mySum :: Num a => MyType a -> a
mySum (MyInt i) = fromIntegral i
mySum (MyOther n m) = n + mySum m
或者我們可以有一個僅在a
是Bool
時才起作用的函數:
trueOrGE10 :: MyType Bool -> Bool
trueOrGE10 (MyInt i) = i >= 10
trueOrGE10 (MyOther b _) = b
與所有Haskell代碼一樣,有必要在編譯時確定放入這些函數之一的特定表達式是否具有正確的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.