鉴于 : data Foo = FooString String … class Fooable a where –(is this a good way to name this?) toFoo :: a -> Foo 我想让String成为Fooable一个实例: instance Fooable String where toFoo = FooString GHC然后抱怨: Illegal instance declaration for `Fooable String' (All instance types must be of the form (T t1 … tn) where T is […]
我试图在GHCi中启用XRankNTypes 。 我该怎么做呢?
我最近完成了一门以Haskell和Agda(一种依赖types的函数式编程语言)为特色的大学课程,并且想知道是否可以用组合逻辑来替代这些中的lambda演算。 对于Haskell来说,使用S和K组合器似乎是可能的,从而使其不存在任何问题。 我想知道Agda的等价物是什么。 也就是说,能不能使用任何variables就可以生成一个与Agda相当的函数式编程语言? 另外,是否有可能以某种方式取代组合器的量化? 我不知道这是否是巧合,但是例如通用量化使得types签名看起来像一个lambdaexpression式。 有没有办法从types签名中去除通用量化而不改变其含义? 例如: forall a : Int -> a < 0 -> a + a < a 同样的事情可以不使用forall来expression吗?
我有两次最近重构的代码,以改变参数的顺序,因为有太多的代码,像flip或\x -> foo bar x 42黑客发生。 当devise一个函数签名时,哪些原则会帮助我充分利用currying?
一个经典的编程练习是在Lisp / Scheme中编写一个Lisp / Scheme解释器。 全语言的力量可以用来为语言的一个子集产生一个解释器。 Haskell有类似的练习吗? 我想用Haskell作为引擎来实现一个Haskell的子集。 当然可以 ,但是有没有在线资源可供查看? 这是背后的故事。 我正在探索使用Haskell作为一种语言的想法来探索我正在教授的离散结构课程中的一些概念。 在这个学期里,我已经解决了米兰达 ,一个较小的语言,启发了哈斯克尔。 米兰达做了大概90%的工作,但是哈斯克尔做了大约2000%的工作。 🙂 所以我的想法是创build一个语言,具有我想要的Haskell的特征,并且不允许其他任何东西。 随着学生的进步,我可以select性地“开启”各种function,一旦他们掌握了基础知识。 教学“语言水平”已被成功地用来教授Java和Scheme 。 通过限制他们可以做的事情,可以防止他们在掌握你正在教的语法和概念的同时,在脚下自己开枪。 而且你可以提供更好的错误信息。
有一个函数来连接列表的元素与分隔符? 例如: > foobar " " ["is","there","such","a","function","?"] ["is there such a function ?"] 谢谢你的回复!
我试图在Haskell中直观地看到一些简单的自动物理系统(例如钟摆,机器人arm等)。 通常这些系统可以用类似的方程来描述 df/dt = c*f(t) + u(t) u(t)代表某种“智能控制”。 这些系统看起来很适合function反应编程范例。 于是我拿起Paul Hudak写的“Haskell School of Expression”一书,发现那里介绍的领域专用语言“FAL”(对于functionanimation语言)实际上对我的简单玩具系统非常好用(尽pipe一些function,特别是integrate ,似乎有点懒得有效使用,但容易修复)。 我的问题是,对于更先进甚至实际应用而言,更成熟,最新,维护良好,性能优化的替代scheme是什么? 这个wiki页面列出了Haskell的几个选项,但我不清楚以下方面: 来自Conal Eliott的项目“反应式”的状态(据我所知)是这个编程范式的发明者之一,看起来有些陈旧。 我喜欢他的代码,但也许我应该尝试其他更新的替代scheme? 在语法/性能/运行时稳定性方面,它们之间的主要区别是什么? 引用2011年的一项调查 ,第6节,“ … FRP的实施仍然不够有效或足够可预测的性能,以有效地使用需要延迟保证的领域… ”。 虽然这项调查提出了一些有趣的可能的优化,但考虑到FRP已经有超过15年的历史了,我觉得这个性能问题可能至less在几年之内甚至是很难解决的。 这是真的? 调查的同一作者在博客中谈到“时间泄漏”。 这个问题是FRP独特的问题,还是我们用纯粹的非严格语言进行编程时普遍存在的问题? 你是否曾经发现,如果不够高性能的话,就很难稳定一个FRP系统的使用寿命? 这仍然是一个研究水平的项目? 人们喜欢工厂工程师,机器人工程师,财务工程师等,是否真正使用它们(以适合他们需要的whaterver语言)? 虽然我个人比较喜欢Haskell的实现,但我可以接受其他的build议。 例如,有一个Erlang实现将会特别有趣 – 那么拥有一个智能的,适应性的,自学习的服务器进程将非常容易!
我已经在互联网上search这个关键字的实际解释。 我看过的每一个Haskell教程都会随机开始使用它,而不会解释它做了什么(而且我看了很多)。 下面是使用Just Real World Haskell的一段基本代码。 我明白代码的作用,但我不明白Just的目的或function是什么。 lend amount balance = let reserve = 100 newBalance = balance – amount in if balance < reserve then Nothing else Just newBalance 从我所观察到的,它与Maybeinput有关,但这几乎是我所学的东西。 非常感谢Just意思。
我最近发现types的洞与certificate上的模式匹配相结合,在Haskell中提供了非常好的Agda类体验。 例如: {-# LANGUAGE DataKinds, PolyKinds, TypeFamilies, UndecidableInstances, GADTs, TypeOperators #-} data (==) :: k -> k -> * where Refl :: x == x sym :: a == b -> b == a sym Refl = Refl data Nat = Zero | Succ Nat data SNat :: Nat -> * where SZero :: SNat […]
我写了这个Haskell的一小部分来弄清GHC如何certificate对于自然数,你只能减半: {-# LANGUAGE DataKinds, GADTs, KindSignatures, TypeFamilies #-} module Nat where data Nat = Z | S Nat data Parity = Even | Odd type family Flip (x :: Parity) :: Parity where Flip Even = Odd Flip Odd = Even data ParNat :: Parity -> * where PZ :: ParNat Even PS :: (x […]