OCaml是否有类似Haskell listify的特定类型值提取函数?
OCaml中是否有类似Haskell
listify的泛型提取函数? 在Haskell中,结合使用listify与Data类型类,可以无需编写大量getter,直接从深度嵌套的结构中提取特定类型的值。示例代码如下:
{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE OverloadedStrings #-} module Lib ( john , listStrings ) where import Data.Data import Data.Generics.Schemes import Data.Text data Person = Person { name :: Name , address :: Address } deriving (Data, Show) data Name = Name { firstName :: Text , lastName :: Text } deriving (Data, Show) data Address = Address { addressLine :: Text , city :: Text , province :: Text , country :: Text } deriving (Data, Show) john :: Person john = Person { name = Name {firstName = "John", lastName = "Smith"} , address = Address { addressLine = "1-2-3 Nantoka-kantoka-machi" , city = "Nishinomiya" , province = "Hyogo" , country = "Japan" } } listStrings :: Person -> [Text] listStrings = listify (const True)
调用listStrings john会返回john中的所有Text类型值:
ghci> listStrings john ["John","Smith","1-2-3 Nantoka-kantoka-machi","Nishinomiya","Hyogo","Japan"]
请问OCaml中是否有类似功能的函数?
背景
我正在开发一款Coq代码格式化工具,在处理符号(如_ = _)的美观打印时遇到困难。符号对应的节点构造器是CNotation,属于constr_expr_r类型。
Coq的OCaml API提供了find_notation_printing_rule函数,它接收CNotation类型的值并返回该符号的打印规则,但我不理解返回规则的含义。为此我打算编写一个打印规则导出程序:该程序接收Coq代码输入,提取其中的符号并导出包含打印规则等有用信息的内容,在提取阶段需要类似listify的函数来获取CNotation实例。
内容的提问来源于stack exchange,提问作者toku-sa-n
相关产品推荐
相关产品推荐

