簡體   English   中英

haskell中的函數單獨聲明

[英]Separate declaration of functions in haskell

有沒有一種方法(也許有些編譯指示或擴展名(我正在使用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"

即我需要一些東西來消除這種限制。

我需要某種“游戲”來使用它,在此之前的代碼無法編輯。

先感謝您!

據我所知,這是不可能的。 像這樣的多個定義僅是語法case ,因此不是語法上魯棒的語法抽象。 只是通常沒有必要。

使用haskell-src來解析Haskell代碼並為您的游戲構建增量界面可能會很幸運。

我不禁感到,如果允許的話,人們會編寫相當混亂的代碼。

除非有重要的結構原因,否則最好堅持使用通常有效的語法-如果定義全部放在一個地方,則更容易理解。

但是,也許最好以不同的方式構造它以實現所需的功能:

  • 您可以使用Data.Map在代碼的不同部分構建幾個子圖,然后在某個適當的階段將它們粘合在一起。

  • 您可以將這些定義保存在一個或多個配置文件中,並在游戲初始化時讀取它們。 您的用戶可能喜歡以這種方式輕松編輯游戲。

  • 您可以以更方便Haskell的方式存儲數據

    • 您可以使用快速的二進制包對其進行序列化,然后在運行時讀取它。

    • 您可以使用Yesod的與后端無關的Persistent

    • 這里有太多其他選擇

  • 您可以對fun1的輸入使用聯合類型(例如Either ),然后分發有關代碼的定義,但是編寫一個統一的功能來檢查輸入並根據類別對其進行標記。

在不了解您要做什么的情況下很難知道什么是最好的,但是放松sytnax規則並不意味着前進了一步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM