我有一个接受列表和操作的以下函数,并在该列表上执行操作。
-- 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) )
这里我可以对第一个参数进行类型分析,但是我应该为实际映射的第二个参数做什么 有人可以指导我正确的方向
答案 0 :(得分:1)
如果您只有一组预定义的可用操作(例如*
,/
或其他),那么最简单的方法是解析字符串,然后选择要执行的操作使用什么价值观。
但是,如果您希望允许用户使用任何haskell表达式进行映射,那么事情会变得更加困难。您可以使用GHC API动态加载和执行代码,但API的记录很差。