我有一个类型类MyClass,并且它中有一个函数可以生成一个String.我想用这个暗示的实例Show,让我可以通过实施类型MyClass来show.到目前为止,我有,
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) 在Linux上编译和运行Dalvik虚拟机所需的最小步骤(包括检索源代码)是什么?
我想要一个更好的C.让我解释一下:
我在C中做了很多编程,这对于具有实时需求的应用程序是必需的,例如音频编程,机器人,设备驱动程序等.
虽然我喜欢C,但是在花了很多时间在Haskell之后让我紧张的一件事就是缺少一个合适的类型系统.也就是说,只要你想编写一个更通用的函数,说一些操纵泛型指针的东西(比如说一个通用的链表)就必须把东西投射到void*什么东西上,然后你就会丢失所有类型的信息.它是一个全有或全无的系统,它不会让你编写泛型函数而不会失去类型检查的所有优点.
C++没有解决这个问题.我还是不想使用C++.我发现OO类和模板很令人头疼.
Haskell及其类型类确实解决了这个问题.您可以使用语义上有用的类型,并使用类型约束来编写对不依赖的类类操作的函数void.
但是我正在使用的域名,我不能使用Haskell,因为它不具备实时功能 - 主要是因为垃圾收集.GC是必需的,因为很难进行功能编程,这种编程很重,没有自动内存管理.但是,类型类的概念并没有特别针对C的语义.我想要C,但是使用Haskell的可靠类型系统,可以帮助我编写好的系统.但是,我真的想要C:我想控制内存管理,我想知道数据结构是如何布局的,我想使用(井型)指针算法,我想要可变性.
有这样的语言吗?如果是这样,为什么它不适合低级编程呢?
旁白:我知道在这个方向上有一些小的语言实验,但我对在真实世界的项目中真正可用的东西很感兴趣.我对成长到发达的语言感兴趣,但不是那么多"玩具"语言.
我应该补充一下,我听说过Cyclone,这很有意思,但是我无法让它为我编译(Ubuntu)而且我还没有听说过任何实际使用它的项目......欢迎任何其他建议.
谢谢!
以下程序正确终止:
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) 使用git与多人合作时,情况会更好
正如我所看到的那样,在(1)的情况下,虽然每个主人都充当一个分支,但每个人都希望在彼此的工作之间融合一个主要是线性的流,而在(2)中,每个人都希望合并一个共同的主人.进入他们的分支,并在他们准备好时将更改从他们的分支推送到共同的主人.
具有使用git工作在中型到大型团队工作经验的人可以发表任何评论吗?哪种方法最适合您的团队?我想第三种选择是总是使用特征分支而不是人分支,尽管我认为这与(2)从这个问题的观点基本相同.
我想,在(1)和(2)中,一个人负责将变更拉到"官方"主人.如果超过一个人作为推动访问官方主人,这将如何延续?