haskell的外部功能?

时间:2011-12-19 15:29:47

标签: haskell

我想编写一个使用由用户定义的函数的模块。例如:

module A
(someFun) where

someFun x = doSomethingWith externFun x

我希望externFun由用户定义,在导入模块A的文件中。有办法吗?或者这只是一个坏主意?

我当然可以将externFun作为参数传递给someFun,但是它看起来不太方便:每次调用someFun时要传递的函数都是相同的。

3 个答案:

答案 0 :(得分:8)

其他答案是错误的: 可能!还有一个名为ImplicitParams的小扩展名,正是为了这个而做的。例如:

-- A.hs
{-# LANGUAGE ImplicitParams #-}
module A where
someFun x = ?externFun (?externFun x)

-- B.hs
{-# LANGUAGE ImplicitParams #-}
module B where
import A
main = print (someFun 3) where
    ?externFun = (2*)

在ghci:

Prelude *B> main
12

瞧!有关Hugs manualGHC manualImplicit Parameters: Dynamic Scoping with Static Types (PDF)

的更多信息

答案 1 :(得分:6)

不,你不能这样做。把它作为一个参数传递是要走的路。但是,您可以通过使用部分应用程序来消除重复。在其他模块中做这样的事情:

import A (someFun)
someFun' = someFun externFun

现在,您可以在任何地方使用someFun'

答案 2 :(得分:0)

不,你应该把它作为一个论据。为什么你认为每次通话都是一样的?它就像任何其他论点一样。