我们正在编写一个Python程序,旨在根据输入输出对合成(简单的)Haskell函数。在程序运行期间,我们生成Haskell代码并针对用户提供的示例检查其正确性。
假设我们的输入为“1 2”,期望输出为“3”。我们最终会得到加法函数。然后我们将在Haskell中运行
我们当前的做法是运行以下Python代码:
假设我们的输入为“1 2”,期望输出为“3”。我们最终会得到加法函数。然后我们将在Haskell中运行
(\x y -> x + y) 1 2
并检查它是否计算出3。我们当前的做法是运行以下Python代码:
from subprocess import Popen, PIPE, STDOUT
proccess = Popen(f'ghc -e "{haskell_code}"', shell=True, stdout=PIPE, stderr=STDOUT)
haskell_output = proc.stdout.read().decode('utf-8').strip('\n')
由于我们都不熟悉 GHC、Haskell、进程,或者与这些相关的任何内容,因此我们希望有人能够帮助我们以(更)高效的方式执行此任务,因为当前速度非常慢。
此外,我们希望能够执行多个语句。例如,我们想要导入 Data.Char 以便我们的函数可以使用“toUpper”。然而,我们目前的做法是发送一个单独的 lambda 函数和附加在其后的输入,我们不确定如何在其上添加导入语句(添加"\n"似乎没有起作用)。
总之,我们希望找到运行速度最快的解决方案,使我们能够从 Python 中测试 Haskell 函数(其中我们不预先拥有所有 Haskell 函数的代码,而是在生成代码时进行测试),同时允许我们使用多个语句(例如导入)。
如果其中任何内容都很简单或愚蠢,请谅解,我们非常感谢任何的帮助。
ghc -e
是相当受限制的。你可能只能够使用完全合格化的Data.Char.toUpper
或编写一个完整文件并用runghc
执行它。 - melpomene