Questions tagged «haskell»

2
系统F无法计算哪些功能?
在有关图灵完整性的维基百科文章中,它指出: 未类型化的lambda演算是图灵完备的,但包括系统F在内的许多类型的lambda演算不是。类型化系统的价值在于它们能够代表最典型的计算机程序并同时检测更多错误。 系统F无法计算的总可计算函数的示例是什么? 另外,由于hindley-milner是: 系统F的限制 由于以下事实: 类型检查对于System F的Curry样式变体是不确定的,也就是说,缺少显式的键入注释。 这是否意味着在Hindley-Milner类型系统下的lambda演算还没有完全完善? 如果是这样,由于haskell显然是图灵完成的,并且我们知道它是lambda演算和hindley-milner类型系统的基础,因此为了使haskell图灵完成,添加了lambda演算中不存在的哪些功能?

5
是否有用于纯功能编程语言的带注释的形式验证系统?
ACSL(Ansi C规范语言)是C代码的规范,带有特殊注释,可对C代码进行正式验证。 我没有研究它,但是我想ACSL验证器中使用的形式方法将类似于Hoare Logic。但是对于纯函数式语言(例如Haskell),我无法想象将使用哪种形式主义进行形式验证。 除了纯函数式语言外,有人做过类似于ACSL的东西吗?如果不是,是否有针对功能语言的规范标注样式形式验证的研究? 我知道有一种依赖类型,许多语言(Agda,Idris等)都支持这种类型,但是在Haskell中,不进行某种(不可读的)类型wizardry很难实现依赖类型。考虑到这一点,由于Haskell具有比Agda和Idris更好的库支持,我相信这样的功能形式验证系统可能会有用,但是我不知道是否对此进行了研究。

1
为什么函数式编程语言需要垃圾回收?
是什么阻止ghc将Haskell转换为连接编程语言(例如组合逻辑),然后仅对所有内容使用堆栈分配?根据Wikipedia的说法,从lambda演算到组合逻辑的转换是微不足道的,而且,级联编程语言可以仅依靠堆栈来进行内存分配。进行这种翻译从而消除Haskell和ocaml等语言的垃圾回收是否可行?这样做有不利之处吗? 编辑:移到这里/programming/39440412/why-do-functional-programming-languages-require-garbage-collection

4
函数的eta等效性是否可以与Haskell的seq操作兼容?
引理:假设等式我们有(\x -> ⊥) = ⊥ :: A -> B。 证明:⊥ = (\x -> ⊥ x)通过η等价,并(\x -> ⊥ x) = (\x -> ⊥)通过λ下的减少。 Haskell 2010报告第6.2节seq通过两个方程式指定了该函数: 序列:: a-> b-> b seq⊥b =⊥ seq ab = b,如果a≠⊥ 然后声明“因此,⊥与\ x-> not不同,因为seq可用于区分它们。” 我的问题是,这真的是定义的结果seq吗? 隐含的说法似乎是seq将不可计算如果seq (\x -> ⊥) b = ⊥。但是我还不能证明这样的seq说法是没有争议的。在我看来,seq这既是单调的,又是连续的,这使它处于可计算的领域。 诸如seq之类的算法可能会通过枚举以starting开头的域来尝试搜索某些x位置f x ≠ ⊥而工作f。尽管这样的实现,即使有可能,一旦我们想要使seq多态成为现实,也会变得非常麻烦。 是否有证据证明不存在可计算seq的是标识(\x …

2
Alternative,MonadPlus(LeftCatch)和MonadPlus(LeftDistributive)之间有什么关系?
跟进什么是替代而不是MonadPlus的Monad示例?: 假设是单子。什么是关系betweem 米是一个另类,一个MonadPlusCatch和MonadPlusDistr?mmmmmm对于六种可能的组合中的每一种,我都希望有一个证据表明一个隐含着另一个,或者有一个反例却没有。 (我在用着 MonadPlusCatch用来区分满足Left-Catch规则的MonadPlus: mplus (return a) b = return a MonadPlusDistr区分MonadPlus是satifies 左分配规则: mplus a b >>= k = mplus (a >>= k) (b >>= k) 请参阅HaskellWiki上的MonadPlus。) 我目前的知识和直觉是: MonadPlusDist 替代 - 可能是正确的 - 似乎很简单,我相信我有一个证明的草图,我将对其进行检查,如果它是正确的,我会将其张贴在 AndrewC回答的这一部分。→→\rightarrow →→\rightarrow Maybe →→\rightarrow MaybeT (Either e)MaybeT m' ((pure x) <|> g) <*> a = …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.