我正在阅读这篇优秀的论文"结构化图形的功能编程,Bruno C. d.S. Oliveira"(这里有一些视频),我正试图实现所有的结构.我正在努力使用存在感.尽管作者提到了Haskell throghout,但似乎这些类型更容易用Coq或Agda表达.我该怎么做这个编译?谢谢.
data PStream a v = Var v
| Mu (v -> PStream a v)
| Cons a (PStream a v)
data Stream a = forall v. Pack {pop :: PStream a v}
foldStream :: (a -> b -> b) -> b -> Stream a -> b
foldStream f k (Pack s) = pfoldStream s
where pfoldStream (Var x) = x
pfoldStream (Mu g) = pfoldStream (g k)
pfoldStream (Cons x …Run Code Online (Sandbox Code Playgroud) 我知道在0.6中删除了可变字段.我用这段代码得到以下错误,
C:\ Users\mflamer\Dropbox\Rust\Tests\gmap.rs:23:8:23:18错误:分配到不可变字段C:\ Users\mflamer\Dropbox\Rust\Tests\gmap.rs:23 dart. alpha = vec :: from_elem(self.n + 1,dart);
我在这做错了什么?谢谢.
pub struct GMap<T> {
priv n: uint,
priv darts: ~[Dart<T>]
}
struct Dart<T> {
alpha: ~[@Dart<T>],
embed: ~[@T],
tagged: bool
}
impl<T> GMap<T> {
pub fn new(dim: uint) -> GMap<T> {
let mut map: GMap<T> = GMap{n: dim, darts: ~[]};
return map
}
pub fn new_dart(&self, ) -> @Dart<T> {
let mut dart = @Dart{alpha: ~[], embed: ~[], tagged: false};
dart.alpha = vec::from_elem(self.n + 1, dart);
//dart.embed …Run Code Online (Sandbox Code Playgroud) 我已经离开Haskell很长一段时间了.我正在研究"实施功能语言教程",以便快速了解并了解更多有关幕后内容的信息.我似乎无法得到"令牌"这个论点如何适用于此.类型签名清楚地说明这个函数需要一个函数和2个解析器并返回一个解析器."令牌"是列表理解中使用的列表理解的结果吗?谢谢.
pThen :: (a -> b -> c) -> Parser a -> Parser b -> Parser c
pThen combine p1 p2 tokens =
[(combine v1 v2, tokens2) | (v1, tokens1) <- p1 tokens,
(v2, tokens2) <- p2 tokens1]
Run Code Online (Sandbox Code Playgroud)
编辑:在阅读下面的有用答案之后,我在本书中稍早注意到这个更简单的例子.这里更加明显,以防万一将来对其他人有帮助.
pAlt :: Parser a -> Parser a -> Parser a
pAlt :: Parser a -> Parser a -> Parser a
pAlt p1 p2 toks = (p1 toks) ++ (p2 toks)
Run Code Online (Sandbox Code Playgroud) 我创建了一个使用GADT和DataKinds的问题的一个非常简单的例子.我的实际应用显然更复杂,但这清楚地捕捉了我的情况的本质.我正在尝试创建一个可以返回Test类型的任何值(T1,T2)的函数.有没有办法实现这一目标,还是我进入了依赖类型的领域?这里的问题看起来很相似,但我无法从他们那里找到(或理解)我的问题的答案.我刚开始理解这些GHC扩展.谢谢.
{-# LANGUAGE GADTs, DataKinds, FlexibleInstances, KindSignatures #-}
module Test where
data TIdx = TI | TD
data Test :: TIdx -> * where
T1 :: Int -> Test TI
T2 :: Double -> Test TD
type T1 = Test TI
type T2 = Test TD
prob :: T1 -> T2 -> Test TIdx
prob x y = undefined
Run Code Online (Sandbox Code Playgroud)
----这是错误---- Test.hs:14:26:
Kind mis-match
The first argument of `Test' should have kind `TIdx',
but `TIdx' has kind `*'
In …Run Code Online (Sandbox Code Playgroud) 我正在阅读"计划的三种实施模式".我想继续工作并实现解释器,但我收到错误消息.我认为作者是chez方案背后的人,所以除了DrRacket(R5RS模式)之外我还尝试过.有谁知道将运行此示例代码的方案设置?似乎这是计划的常见问题.我尝试的每个示例代码都有一些问题,或者是在不同版本中创建的.这是该论文的链接.谢谢.
我有一个模块,定义和导出类型和类型类,如下所示.问题是我似乎无法在此模块中使用该类的函数,因为还没有该类的实例.
这是GHC错误:"aabb'的类型签名缺少附带的绑定"
有没有解决这个问题的方法?谢谢.
module AABB (
AABB
,Boundable(..)
,aabb
,consume
) where
type AABB = (Vec3,Vec3)
class Boundable a where
aabb ? a ? AABB
consume ? (Boundable a) ? AABB ? a ? AABB
consume (v0,v1) x = (minV v0 v2, maxV v1 v3)
where (v2,v3) = aabb x
maxV ? Vec3 ? Vec3 ? Vec3
maxV (Vec3 x0 y0 z0) (Vec3 x1 y1 z1) = Vec3 (max x0 x1) (max y0 y1) (max z0 z1)
minV ? Vec3 …Run Code Online (Sandbox Code Playgroud)