[英]haskell : calculated fields in custom data types
是否可以執行某些操作,該操作等同於在數據類型中具有從數據類型中的其他字段自動計算的字段。 例如:
data Grid = Grid
{ x :: Int
, y :: Int
, c = (x * y) :: Int
}
然后myGrid = Grid 5 6
或者這必須是或只能用Class
做?
data Grid = Grid
{ x :: Int
, y :: Int
}
class Calculated a where
c :: a -> Int
instance Calculated Grid where
c g = x g * y g
沒有任何額外要求,這只是一個功能。
c :: Grid -> Int
c g = x g * y g
如果由於某種原因,您想要預先計算c
並將其存儲在值中,請定義一個智能構造函數。
data Grid = Grid {x :: Int, y :: Int, c :: Int}
mkGrid :: Int -> Int -> Grid
mkGrid x y = Grid x y (x * y)
Haskell中的數據和函數分離比OO語言更嚴格。 data
僅定義新類型,而不是該類型的操作。 記錄語法僅為某些類型x
提供表格Grid -> x
投影; 它不會讓你定義任何更復雜的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.