Haskell:设计模式:类或传递函数



假设我有一个函数,它接受一些输入结构并返回一些输出结构(可能与输入结构相关但不同)。

我不想将这些输入/输出结构强制用于特定类型,我只想确保它们具有我需要的一些行为。

我应该吗?

a) 定义一个具有适当提取方法的类,并强制输入数据为该类的实例
b) 让函数接受另一个参数,即定义如何提取数据的函数。

对于输出结构,我也有同样的问题(除了这次所需的功能是突变)?

当您必须在显式函数参数和类型类之间进行选择时,您应该问自己一个最重要的问题:函数是特定于类型还是特定于应用程序?前者的一个例子是sort,而后者的一个实例是map

传递函数总是更灵活,但它可能会对您的情况造成过度处理,并导致不必要的代码膨胀。另一方面,类型类的代码要小得多,但它们也不那么灵活。

如果没有进一步的信息,就不可能在这里给出更准确的答案。

这取决于情况。

类型类的优点是不必显式地将函数传递给任何辅助函数。因此,如果您有两个以上的函数,或者您希望有很多函数使用相同的基本转换函数,那么类型类可能会更好。

"我只想确保他们有一些我需要的行为。"——这基本上描述了类型类的用途,我同意。不过,我不确定输出结构,我认为函数必须返回特定类型,即使它们是同一类型类的实例,也不能返回几个类型中的一个。

类型类提供类型到函数的唯一映射。因此,您应该询问一个类型是否总是需要相同的函数例如,如果您将向量传递给函数,并且函数需要向量的范数,则使用类型类通常不是一个好主意,因为有许多有用的范数。在这种情况下,函数参数是优选的。

最新更新