Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
推断包含Haskell表达式的字符串的类型_Haskell_Type Inference_Ghc Api_Hindley Milner - Fatal编程技术网

推断包含Haskell表达式的字符串的类型

推断包含Haskell表达式的字符串的类型,haskell,type-inference,ghc-api,hindley-milner,Haskell,Type Inference,Ghc Api,Hindley Milner,我需要一种(快速而肮脏的)方法来获取作为字符串给出的Haskell表达式类型的表示 我目前看到3种选择: 使用GHCAPI——然而,我很快就对文档失去了兴趣 使用其他类型推断工具——有人建议我尝试haskell类型的exts,但它除了最简单的表达式外,无法键入所有其他类型的表达式。我不知道还有其他这样的工具 滚动我自己的HM推断器——除非绝对必要,否则我会避免这样做 我甚至不需要一个完整的解决方案,从某种意义上说,一个可以键入Haskell的合理基本子集的库/工具就足够了 那么,实现这一点最

我需要一种(快速而肮脏的)方法来获取作为字符串给出的Haskell表达式类型的表示

我目前看到3种选择:

  • 使用GHCAPI——然而,我很快就对文档失去了兴趣
  • 使用其他类型推断工具——有人建议我尝试haskell类型的exts,但它除了最简单的表达式外,无法键入所有其他类型的表达式。我不知道还有其他这样的工具
  • 滚动我自己的HM推断器——除非绝对必要,否则我会避免这样做
我甚至不需要一个完整的解决方案,从某种意义上说,一个可以键入Haskell的合理基本子集的库/工具就足够了

那么,实现这一点最简单的方法是什么呢?

为GHC API提供了一个受限制但可能更容易理解的接口。也许对你的目的来说就足够了?如果没有,您可以查看源代码,更好地了解如何直接使用GHCAPI

下面是一个示例程序:

import Language.Haskell.Interpreter

main :: IO ()
main = do
  r <- runInterpreter $ do
    setImports ["Prelude"]
    typeOf "map (+1)"
  either print putStrLn r

看看——其中一些可能比GHC更容易使用。如果你自己去写,马克·P·琼斯可能是一个好的开始。
Num b => [b] -> [b]