小编MFl*_*mer的帖子

使用存在

我正在阅读这篇优秀的论文"结构化图形的功能编程,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)

haskell

4
推荐指数
1
解决办法
237
查看次数

可变结构域

我知道在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)

rust

4
推荐指数
1
解决办法
6570
查看次数

在简单的函数中键入混淆

我已经离开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)

haskell list-comprehension

3
推荐指数
1
解决办法
65
查看次数

DataKinds的麻烦

我创建了一个使用GADT和DataKinds的问题的一个非常简单的例子.我的实际应用显然更复杂,但这清楚地捕捉了我的情况的本质.我正在尝试创建一个可以返回Test类型的任何值(T1,T2)的函数.有没有办法实现这一目标,还是我进入了依赖类型的领域?这里的问题看起来很相似,但我无法从他们那里找到(或理解)我的问题的答案.我刚开始理解这些GHC扩展.谢谢.

类似的问题1

类似的问题2

{-# 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)

haskell gadt data-kinds

2
推荐指数
1
解决办法
529
查看次数

本文使用哪种方案?

我正在阅读"计划的三种实施模式".我想继续工作并实现解释器,但我收到错误消息.我认为作者是chez方案背后的人,所以除了DrRacket(R5RS模式)之外我还尝试过.有谁知道将运行此示例代码的方案设置?似乎这是计划的常见问题.我尝试的每个示例代码都有一些问题,或者是在不同版本中创建的.这是该论文的链接.谢谢.

https://www.cs.unm.edu/~williams/cs491/three-imp.pdf

scheme racket

2
推荐指数
1
解决办法
315
查看次数

Haskell:在没有实例的模块中使用类型类的函数

我有一个模块,定义和导出类型和类型类,如下所示.问题是我似乎无法在此模块中使用该类的函数,因为还没有该类的实例.

这是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)

haskell typeclass

1
推荐指数
1
解决办法
154
查看次数