在haskell中单独声明函数

时间:2013-11-17 03:51:50

标签: haskell ghc

有没有办法(可能是一些编译指示或扩展(我使用 GHC ))允许分别声明不同的函数模式?

例如,我可以这样做:

fun1 1 = "1"
fun1 2 = "a"
fun1 3 = "4"
fun1 4 = "3"

但我不能这样做:

fun1 1 = "1"
fun1 2 = "a"
fun1 3 = "4"

a = 3 -- Just some code here.

fun1 4 = "3"

我。即我需要一些东西来消除这种限制。

我需要在某种“游戏”中使用它,之前的代码无法进行编辑。

提前谢谢!

2 个答案:

答案 0 :(得分:4)

据我所知,这是不可能的。像这样的多个定义只是case上的语法糖,因此不是非常强大的句法抽象。这通常不是必需的。

使用haskell-src package解析Haskell代码并构建游戏的增量界面可能会很幸运。

答案 1 :(得分:2)

我不禁感到如果允许的话,民间会编写相当混乱的代码。

除非有一个重要的结构性原因,否则最好坚持使用通常的有效语法 - 如果定义都集中在一个地方,则更容易理解。

然而,也许最好以不同的方式构建它以实现您想要的目标:

  • 您可以使用Data.Map在代码的不同部分构建多个子图,然后在适当的阶段将它们粘合在一起。

  • 您可以将这些定义保存在一个或多个配置文件中,并在游戏初始化时读取它们。您的用户可能希望以这种方式轻松编辑游戏。

  • 您可以以更加适合Haskell的方式存储数据

    • 你可以使用快速的binary包来序列化它,并在运行时读取它。

    • 您可以使用Yesod的后端不可知Persistent

    • 此处有太多其他选项

  • 您可以使用联合类型(如Either)作为fun1的输入,然后分发有关代码的定义,但编写一个检查输入和标签的统一函数它根据类别。

如果不知道你想要做什么,很难知道什么是最好的,但是放松sytnax规则并不是一个好的进步。