在运行时传递和解析haskell中的map函数

时间:2013-09-08 11:03:19

标签: haskell

我有一个接受列表和操作的以下函数,并在该列表上执行操作。

-- SUMLIST function
sumList :: Num a => [a1] -> (a1 -> a) -> a
sumList numList oper = sum (map (oper) numList)

当我从GHCI提示电话时它工作正常:

sumList [1,2,3,4,5] (*3)
gives: 45

但我想在其上写一个包装器并传递来自file的值: {line is SUMLIST [1,2,3,4,5](* 3)}

let x = (splitOn " " line)
print (sumList (read (x!!1) :: [Int]) (x!!2) )

这里我可以对第一个参数进行类型分析,但是我应该为实际映射的第二个参数做什么 有人可以指导我正确的方向

1 个答案:

答案 0 :(得分:1)

如果您只有一组预定义的可用操作(例如*/或其他),那么最简单的方法是解析字符串,然后选择要执行的操作使用什么价值观。

但是,如果您希望允许用户使用任何haskell表达式进行映射,那么事情会变得更加困难。您可以使用GHC API动态加载和执行代码,但API的记录很差。