我正在学习 Haskell 并编写一个程序来解决一个玩具问题。程序使用的参数k在从文件中读取参数后在运行时不会更改。我对使用纯函数很陌生,我想尽可能多地编写纯函数。
我有一个数据类型Node
,以及比较节点、获取节点后代等的函数。目前,所有这些函数都以参数k作为参数,例如
compare k node1 node2 = ...
desc k node = ...
每当我必须在函数中递归调用其中任何一个时,我都必须重复k参数。这似乎是多余的,因为k对于这些函数永远不会有不同的值,并且因为它降低了类型签名的可读性,如果可能的话,我想重构它。
是否有任何策略可以使用纯函数来做到这一点,或者这仅仅是我必须处理的限制?
我所想到的
早些时候我在顶层硬编码k ,它似乎工作(我能够在函数中使用k而不需要它作为显式参数)。但是,一旦我需要从文件中读取输入,这显然是不可行的。
另一种可能的策略是在函数中定义所有这些函数main
,但在 Haskell 中似乎强烈反对这样做。