hindley-milner

    2热度

    1回答

    我目前正在哈斯克尔建立一个服务器,并作为语言的新手,我想尝试一种新方法zu Monad组合。这个想法是,我们可以编写库方法,如 isGetRequest :: (SupportsRequests m r) => m Bool isGetRequest = do method <- liftRequests $ requestMethod return $ meth

    7热度

    1回答

    有人可以解释一步一步的类型推断在下面的F#程序: let rec sumList lst = match lst with | [] -> 0 | hd :: tl -> hd + sumList tl 我特别想一步看一步辛德雷米尔纳统一的过程中是如何工作的。

    9热度

    1回答

    一个Haskell的类型系统的有趣特性(*)确定的函数的作用是,有时你可以告诉究竟什么功能并仅基于其类型签名(假设没有unsafe IO黑暗魔法invloved)。 例如,对于类型签名a -> a任何函数必须是恒等函数,和(a,b) -> a类型的任何功能等同于fst。在某些情况下,您无法完全确定功能:类型为a -> Int的不同可能功能有无数种,但它们都是常数 - 它们都忽略第一个参数。 我觉得

    3热度

    1回答

    鉴于这两个程序(用JavaScript编写)&hellip; // comp :: (b -> c) -> (a -> b) -> (a -> c) const comp = f=> g=> x=> f (g (x)) // comp2 :: (c -> d) -> (a -> b -> c) -> (a -> b -> d) const comp2 = comp (comp) (comp

    9热度

    1回答

    如果我正确理解了Haskell中的ST monad,runST以聪明的方式使用了rank-2类型,以确保计算在转义monad时不会引用任何其他线程。 我有一个Hindley-Milner类型系统的玩具语言,我的问题如下:是否可以通过用于键入runST应用程序的特殊规则来扩展HM类型系统,以便ST monad安全没有引入rank-2类型,可以逃跑,? 更确切地说,runST本来型forall s a

    10热度

    1回答

    我需要一个(快速和肮脏的)方法来获取以字符串形式给出的Haskell表达式类型的一些表示形式。 我目前看到3个选项: 使用GHC API - 然而,文档很快失去我。 使用其他类型的推理工具 - 我建议尝试使用haskell-type-exts,但它无法输入除最常见的表达式外的所有其他类型的表达式。我不知道任何其他这样的工具。 推出自己的HM推断器 - 我想避免这种情况,除非绝对必要 我也不需要一个

    27热度

    1回答

    有人曾经给我看SML一个小“伎俩”,其中他们在REPL写了约3或4的功能和最后一个值的结果类型是极长(如很多页面卷轴很长)。 有谁知道什么代码产生这么长的类型,或者如果有一个名称为这种行为的?如果你以正确的方式撰写他们

    2热度

    1回答

    GHC说我的函数太泛泛,无法作为参数传递。 这里是一个简化版本,再现错误: data Action m a = SomeAction (m a) runAction :: Action m a -> m a runAction (SomeAction ma) = ma -- Errors in here actionFile :: (Action IO a -> IO a) -> S

    0热度

    1回答

    我正在处理一些parsec代码。在脚本的底部,有一个parseFromFile通话,这样ParseFromFile来自Text.Parsec.String parseFromFile parserCode inFile 如果我评论了这一点,我的代码不再编译,我得到模棱两可的错误类型的主机: DeleteMe.hs:47:18-23: No instance for (Stream s0 Dat

    1热度

    1回答

    我想通过在我通常使用的语言Clojure中实现算法W来教自己Hindley-Milner类型推论。我遇到了let推理的问题,并且我不确定我是否做错了什么,或者我期望的结果是否需要算法之外的某些东西。 基本上,使用Haskell的符号,如果我尝试推断该类型: \a -> let b = a in b + 1 我得到这个: Num a => t -> a 但我应该得到这样的: Num a =>