Haskell在数据结构中存储函数 - 用例

时间:2014-06-03 02:56:46

标签: function haskell data-structures

我正在浏览软件基础书(http://www.cis.upenn.edu/~bcpierce/sf/Basics.html)。在 Introduction 的第二段中,提到当函数被视为第一类值时,它们可以存储在数据结构中。快速谷歌搜索这个应用程序发现酸状态(http://acid-state.seize.it/),它可能用它来存储功能(如果我错了请纠正我)。是否有其他应用程序可以使用存储功能作为数据结构中的数据?将函数作为数据存储在Haskell中的常见模式中?提前谢谢。

编辑:我知道更高阶的功能。

2 个答案:

答案 0 :(得分:3)

简单易用的数据结构函数示例是包含函数(以及可能的数据)的记录。

一个很好的例子是在Luke Palmer的博客文章Haskell Antipattern: Existential Typeclass中,他解释说,不是尝试为小部件重现类似OO的类,而是使用许多实例,然后将UI小部件存储在存在量化的列表中,最好记录你将要使用的实际函数并返回而不是保留原始数据类型 - 一旦你存在量化,你就无法获得原始数据类型,所以你不会丢失任何东西在表现力方面,但在可操作性方面获得了很多。他总结道

  

函数是重用的主人:当你使用高级功能时,你需要一个更高级的功能来抽象它(想想:类<存在类型<普遍量化的约束< unknown)。但是你需要在函数上进行抽象的是另一个函数。

这意味着我们可以编写高阶函数来处理这些函数,并传递它们并轻松操作它们,因为它们是数据。

答案 1 :(得分:2)

第一类函数非常有用 - 我认为它们的主要用例是higher order functions,这简化了许多需要在其他语言中使用更复杂模式的问题,例如Java。