1

在 Python 中,如果给定的包存在,我可以选择运行一些代码,如下所示:

try:
  import asd
  # do something with asd
except ImportError:
  print "no module asd"

有没有等效的 Haskell?

4

3 回答 3

5

不是直接的,因为模块导入是在编译时用 GHC 解析的。但是,如果您使用的是Cabal (而且您应该是!),您可以根据配置标志有条件地依赖一个包,然后CPP根据该依赖项是否存在使用扩展来编译代码:

#if MIN_VERSION_somepackage(0,0,0)
...code using somepackage...
#else
...code not using somepackage...
#endif

不过,这有点尴尬,所以我不建议使用它,除非你真的需要它......

于 2012-04-04T01:30:40.840 回答
1

不会。Haskell 编译器会拒绝任何导入它找不到的模块的程序,就像它会拒绝使用未定义的函数一样。

于 2012-04-04T01:21:11.133 回答
1

此外,如果您使用plugins,您可能能够在运行时使用新库。

于 2012-04-04T12:16:27.013 回答