小编Ste*_*eve的帖子

我怎么写,"如果是类型类型a,那么a也是这个定义的b实例."

我有一个类型类MyClass,并且它中有一个函数可以生成一个String.我想用这个暗示的实例Show,让我可以通过实施类型MyClassshow.到目前为止,我有,

class MyClass a where
    someFunc :: a -> a
    myShow :: a -> String 

instance MyClass a => Show a where
    show a = myShow a
Run Code Online (Sandbox Code Playgroud)

这给出了Constraint is no smaller than the instance head. 我也尝试过的错误,

class MyClass a where
    someFunc :: a -> a
    myShow :: a -> String

instance Show (MyClass a) where
    show a = myShow a
Run Code Online (Sandbox Code Playgroud)

它给出了错误,ClassMyClass'用作类型`.

我怎样才能在Haskell中正确表达这种关系?谢谢.

我应该补充一点,我希望MyClass根据其类型发出特定字符串的特定实例来跟进这一点.例如,

data Foo …
Run Code Online (Sandbox Code Playgroud)

haskell

49
推荐指数
3
解决办法
3273
查看次数

如何编译Dalvik在Linux上本地运行?

在Linux上编译和运行Dalvik虚拟机所需的最小步骤(包括检索源代码)是什么?

android dalvik

27
推荐指数
2
解决办法
2万
查看次数

有更好的C吗?

我想要一个更好的C.让我解释一下:

我在C中做了很多编程,这对于具有实时需求的应用程序是必需的,例如音频编程,机器人,设备驱动程序等.

虽然我喜欢C,但是在花了很多时间在Haskell之后让我紧张的一件事就是缺少一个合适的类型系统.也就是说,只要你想编写一个更通用的函数,说一些操纵泛型指针的东西(比如说一个通用的链表)就必须把东西投射到void*什么东西上,然后你就会丢失所有类型的信息.它是一个全有或全无的系统,它不会让你编写泛型函数而不会失去类型检查的所有优点.

C++没有解决这个问题.我还是不想使用C++.我发现OO类和模板很令人头疼.

Haskell及其类型类确实解决了这个问题.您可以使用语义上有用的类型,并使用类型约束来编写对不依赖的类类操作的函数void.

但是我正在使用的域名,我不能使用Haskell,因为它不具备实时功能 - 主要是因为垃圾收集.GC是必需的,因为很难进行功能编程,这种编程很重,没有自动内存管理.但是,类型类的概念并没有特别针对C的语义.我想要C,但是使用Haskell的可靠类型系统,可以帮助我编写好的系统.但是,我真的想要C:我想控制内存管理,我想知道数据结构是如何布局的,我想使用(井型)指针算法,我想要可变性.

有这样的语言吗?如果是这样,为什么它不适合低级编程呢?

旁白:我知道在这个方向上有一些小的语言实验,但我对在真实世界的项目中真正可用的东西很感兴趣.我对成长到发达的语言感兴趣,但不是那么多"玩具"语言.

我应该补充一下,我听说过Cyclone,这很有意思,但是我无法让它为我编译(Ubuntu)而且我还没有听说过任何实际使用它的项目......欢迎任何其他建议.

谢谢!

language-features programming-languages real-time

25
推荐指数
8
解决办法
6424
查看次数

CSS和Latex盒子模型有什么区别?

CSS和Latex如何组织盒子有什么区别?(段落或图形元素.)

css layout latex

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

Haskell中的mapM是否严格?为什么这个程序会出现堆栈溢出?

以下程序正确终止:

import System.Random

randomList = mapM (\_->getStdRandom (randomR (0, 50000::Int))) [0..5000]

main = do
  randomInts <- randomList
  print $ take 5 randomInts
Run Code Online (Sandbox Code Playgroud)

运行:

$ runhaskell test.hs
[26156,7258,29057,40002,26339]
Run Code Online (Sandbox Code Playgroud)

但是,为它提供无限列表,程序永远不会终止,并且在编译时,最终会产生堆栈溢出错误!

import System.Random

randomList = mapM (\_->getStdRandom (randomR (0, 50000::Int))) [0..]

main = do
  randomInts <- randomList
  print $ take 5 randomInts
Run Code Online (Sandbox Code Playgroud)

跑步,

$ ./test
Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize -RTS' to increase it.
Run Code Online (Sandbox Code Playgroud)

我希望getStdRandom每次从列表中选择一个项目时,程序都会懒洋洋地评估,在完成5次之后完成.为什么要评估整个列表?

谢谢.

有没有更好的方法来获得无限的随机数列表?我想将此列表传递给纯函数.

编辑:更多阅读揭示了该功能

randomList r = do g <- getStdGen
                  return …
Run Code Online (Sandbox Code Playgroud)

monads haskell lazy-evaluation

8
推荐指数
2
解决办法
1458
查看次数

git工作流:每个人都有一个分支,或者每个人都有一个主人?

使用git与多人合作时,情况会更好

  1. 让每个人都在主人之间工作,并在彼此的主人之间合并,或者
  2. 为每个人在自己的标题分支工作?

正如我所看到的那样,在(1)的情况下,虽然每个主人都充当一个分支,但每个人都希望在彼此的工作之间融合一个主要是线性的流,而在(2)中,每个人都希望合并一个共同的主人.进入他们的分支,并在他们准备好时将更改从他们的分支推送到共同的主人.

具有使用git工作在中型到大型团队工作经验的人可以发表任何评论吗?哪种方法最适合您的团队?我想第三种选择是总是使用特征分支而不是人分支,尽管我认为这与(2)从这个问题的观点基本相同.

我想,在(1)和(2)中,一个人负责将变更拉到"官方"主人.如果超过一个人作为推动访问官方主人,这将如何延续?

git workflow

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