当前位置 : 主页 > 网络推广 > seo >

检索Haskell记录中的字段数

来源:互联网 收集:自由互联 发布时间:2021-06-16
我代表一个表来存储数据作为 Haskell记录,我想知道是否有一个函数来获取给定记录的字段数? 我问,因为我有一个类型类来表示一个表,一个类函数是noOfCols;它对应于表示表的记录中的字
我代表一个表来存储数据作为 Haskell记录,我想知道是否有一个函数来获取给定记录的字段数?

我问,因为我有一个类型类来表示一个表,一个类函数是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
网友评论