小编Joh*_*ler的帖子

订购参数以利用currying

我有两次最近重构的代码,以便更改参数的顺序,因为有太多的代码,黑客喜欢flip\x -> foo bar x 42正在发生.

在设计功能签名时,哪些原则可以帮助我充分利用currying?

haskell functional-programming currying partial-application

92
推荐指数
2
解决办法
3934
查看次数

State,ST,IORef和MVar之间的区别

我正在通过48小时为自己编写一个方案(我大约85小时)而且我已经完成了关于添加变量和赋值的部分.本章中有一个很大的概念性跳跃,我希望它分两步完成,两者之间有很好的重构,而不是直接跳到最终的解决方案.无论如何…

我已经得到了一些不同类的,似乎达到相同的目的失去了:State,ST,IORef,和MVar.文本中提到了前三个,而最后三个似乎是许多关于前三个问题的StackOverflow问题的最佳答案.它们似乎在连续调用之间都处于状态.

这些是什么以及它们如何彼此不同?


特别是这些句子没有意义:

相反,我们使用一个名为状态线程的功能,让Haskell为我们管理聚合状态.这使我们可以像在任何其他编程语言中一样处理可变变量,使用函数来获取或设置变量.

IORef模块允许您在IO monad中使用有状态变量.

所有这一切都使这条线路type ENV = IORef [(String, IORef LispVal)]混乱 - 为什么第二个IORef呢?如果我写的话会破坏什么type ENV = State [(String, LispVal)]

variables monads haskell state-monad ioref

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

为什么我不能使String成为类型类的实例?

鉴于:

data Foo =
  FooString String
  …

class Fooable a where --(is this a good way to name this?)
  toFoo :: a -> Foo
Run Code Online (Sandbox Code Playgroud)

我想做String一个实例Fooable:

instance Fooable String where
  toFoo = FooString
Run Code Online (Sandbox Code Playgroud)

然后GHC抱怨:

Illegal instance declaration for `Fooable String'
    (All instance types must be of the form (T t1 ... tn)
     where T is not a synonym.
     Use -XTypeSynonymInstances if you want to disable this.)
In the instance declaration for `Fooable String'
Run Code Online (Sandbox Code Playgroud)

如果相反我使用[Char]: …

haskell type-systems typeclass ghc

84
推荐指数
3
解决办法
7489
查看次数

LLVM和java字节码有什么区别?

我不明白LLVM和java(字节码)之间的区别,它们是什么?

-edit-由'他们是什么'我的意思是LLVM和java(字节码)之间的差异,而不是LLVM和java.

java comparison jvm llvm

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

用户应该使用/避免哪些Haskell(GHC)扩展?

我已经有过几次GHC告诉我使用扩展的经验,但却发现当使用该扩展时,我使代码变得更加复杂,当一个简单的重构允许我坚持使用Haskell 98(现在2010)并有一个更直接的解决方案.

另一方面,有时候GADT或Rank2Types(很少是RankNTypes)的工作量少得多,代码也更清晰.

哪些扩展通常会掩盖更好设计的可能性,并且通常会改善它?如果有一些同时执行这两项工作,那么在决定使用该扩展之前,用户应该寻找什么(确定它们是否符合他们想要的解决方案)?

(另请参阅我是否应该使用GHC Haskell扩展?)

haskell language-extension

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

如何在Ruby的IRB中启用自动完成

当我使用Merb的内置控制台时,我得到类似于标准bash提示的选项卡自动完成.我觉得这很有用,并希望在非merb IRB会话中启用它.如何在IRB中自动完成?

ruby irb tab-completion

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

在Haskell中执行`and`和`或`表示布尔函数

我刚写了以下两个函数:

fand :: (a -> Bool) -> (a -> Bool) -> a -> Bool
fand f1 f2 x = (f1 x) && (f2 x)

f_or :: (a -> Bool) -> (a -> Bool) -> a -> Bool
f_or f1 f2 x = (f1 x) || (f2 x)
Run Code Online (Sandbox Code Playgroud)

它们可能用于组合两个布尔函数的值,例如:

import Text.ParserCombinators.Parsec
import Data.Char

nameChar = satisfy (isLetter `f_or` isDigit)
Run Code Online (Sandbox Code Playgroud)

看了这两个函数后,我意识到它们非常有用.以至于我现在怀疑它们是否包含在标准库中,或者更可能是使用现有函数有一种干净的方法来执行此操作.

这样做的"正确"方法是什么?

haskell combinators pointfree

42
推荐指数
3
解决办法
5万
查看次数

在Ruby中,`rescue`语句可以嵌套在哪些结构中

在ruby中捕获错误,使用该rescue语句.通常这种说法发生在begin和之间end.也可以使用rescue语句作为block(do ... end)或方法(def ... end)的一部分.我的问题是什么其他结构(循环,而如果,......),如果有任何将拯救巢内?

ruby syntax error-handling

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

SOLID用于函数式编程

来自OOP语言,我熟悉面向对象设计的SOLID原则.似乎其中一些适合功能性编程模型,而其他部分在缺乏状态的世界中毫无意义.重构功能代码是否有类似的原则?

functional-programming solid-principles

31
推荐指数
3
解决办法
5287
查看次数

什么是RWS Monad以及何时使用

我在mtl库中查找了一些东西时遇到了RWS Monad及其MonadTransformer.那里没有真正的文档,我想知道这是什么以及它在哪里使用.

我发现RWS是Reader,Writer,State的首字母缩略词,这就是这三个monad变换器的堆栈.我无法弄清楚为什么这比国家本身更好.

haskell monad-transformers

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