我代表一个表来存储数据作为 Haskell记录,我想知道是否有一个函数来获取给定记录的字段数? 我问,因为我有一个类型类来表示一个表,一个类函数是noOfCols;它对应于表示表的记录中的字
我问,因为我有一个类型类来表示一个表,一个类函数是noOfCols;它对应于表示表的记录中的字段数.
data Price = Price {bid=[Float], ask=[Float]} class Table a where noOfCols :: a -> Int ... instance Table Price where noOfCols t = 2 ...
所以问题是我将不断添加新字段,因此当我向Price添加新列(字段)时,可能忘记更新noOfCols的实例实现;即当我现在有3个或更多字段时,将它留到2.
是否有一个函数可以提供给定记录的字段数,因此每次更改记录时都不必进行手动编辑?
这是可以通过各种通用编程库解决的问题.例如:{-# LANGUAGE DeriveDataTypeable #-} import Data.Data data Price = Price {bid :: [Float], ask :: [Float]} deriving (Typeable, Data) noOfCols :: Data a => a -> Int noOfCols = gmapQl (+) 0 (const 1)
然后:
GHCi> noOfCols (Price [1,2] [3,4,5]) 2 GHCi> noOfCols (0,0,0,0) 4