小编Don*_*art的帖子

null而不是==

我刚刚开始学习Haskell的兴趣.我关注learnyouahaskell.com.

在那里我发现了这个:

null检查列表是否为空.如果是,则返回True,否则返回False.使用此函数代替xs == [](如果您有一个名单xs)

这是为什么?我们为什么要使用null而不是==两者都产生相同的结果?

谢谢.

haskell coding-style operators typeclass

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

什么是使用/有用的镜头?

我似乎无法找到在实际例子中使用什么镜头的任何解释.Hackage页面中的这一短段是我发现的最接近的段落:

该模块提供了访问和更新结构元素的便捷方式.它与Data.Accessors非常相似,但更通用,依赖性更低.我特别喜欢它如何干净地处理状态monad中的嵌套结构.

那么,它们用于什么?他们对其他方法有什么好处和坏处?他们为什么需要?

haskell types data-structures lenses

34
推荐指数
3
解决办法
4407
查看次数

haskell中的并行映射

是否有一些替代品map并行评估列表?我不需要它懒惰.

类似的东西:pmap :: (a -> b) -> [a] -> [b]让我pmap expensive_function big_list拥有100%的核心.

parallel-processing haskell multicore combinators

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

哪个Haskell包用于JSON

Hackage for Haskell上有大约12个JSON包.我怎么知道应该使用哪个包?我如何得到一个流行的意见?

是否有关于哪个包使用最多,下载最多等的统计数据?

json haskell hackage

32
推荐指数
3
解决办法
3102
查看次数

使用代数数据类型或多态性,是否有一个Haskell相当于OOP的抽象类?

在Haskell中,是否可以编写一个带有签名的函数,该签名可以接受两种不同(尽管相似)的数据类型,并根据传入的类型进行不同的操作?

一个例子可能会让我的问题更加清晰.如果我有一个函数命名myFunction,和两个类型的命名MyTypeAMyTypeB,我可以定义myFunction,使其只能接受类型的数据MyTypeAMyTypeB作为其第一个参数?

type MyTypeA = (Int, Int, Char, Char)
type MyTypeB = ([Int], [Char])

myFunction :: MyTypeA_or_MyTypeB -> Char
myFunction constrainedToTypeA = something
myFunction constrainedToTypeB = somethingElse
Run Code Online (Sandbox Code Playgroud)

在OOP语言中,您可以编写我正在尝试实现的内容,如下所示:

public abstract class ConstrainedType {
}

public class MyTypeA extends ConstrainedType {
    ...various members...
}

public class MyTypeB extends ConstrainedType {
    ...various members...
}

...

public Char myFunction(ConstrainedType a) {
    if (a TypeOf MyTypeA) {
        return doStuffA();
    }
    else if …
Run Code Online (Sandbox Code Playgroud)

polymorphism haskell functional-programming typeclass algebraic-data-types

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

有没有任何纯粹的功能方案或Lisps?

我已经使用了一些函数式编程语言,并且非常喜欢Lisps使用的s-expr语法(特别是Scheme).

我也看到了使用纯函数式语言的优势.因此:

是否有任何纯粹的功能方案(或一般的Lisps)?

scheme haskell functional-programming referential-transparency

31
推荐指数
7
解决办法
8360
查看次数

不安全的强制和更高效的Agda代码(-ftrust-me-im-agda)

在Agda邮件列表中,Conor McBride问道:

有没有办法像假定的那样掌握行动

   trustFromJust :: Maybe x -> x
Run Code Online (Sandbox Code Playgroud)

如果没有任何东西,它实际上并没有检查Just and Goes Wrong(在Milner的意义上)?

Agda可能会证明Maybe a == Just1 a,并且可以消除sum类型的中间构造函数.

我可以想到使用unsafeCoerce#或unpackClosure#的方法,但其他人是否有想法?

import GHC.Prim

trustFromJust :: Maybe x -> x
trustFromJust x = y
    where Just1 y = unsafeCoerce# x

data Just1 a = Just1 a
Run Code Online (Sandbox Code Playgroud)

虽然这个段错误(单个构造函数类型可以避免一些闭包开销).核心看起来不错:

main2 =
  case (Data.Maybe.Just @ Type.Integer main3)
       `cast`
       (CoUnsafe
         (Data.Maybe.Maybe Type.Integer)
         (Just1 Type.Integer)
               :: Data.Maybe.Maybe Type.Integer
                    ~
                  Just1 Type.Integer)
  of _ { Just1 y_aeb ->
  $wshowsPrec 0 y_aeb ([] @ Char)
Run Code Online (Sandbox Code Playgroud)

compiler-construction haskell agda

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

用于生成Haskell函数依赖(控制流)图的工具?

注意不是"功能依赖".是否有可用的工具允许我从源代码构建静态函数依赖图?向我指示哪些功能以图形方式依赖于哪些功能的东西.

haskell code-analysis static-analysis

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

OCaml显式类型签名

在Haskell中,明确声明函数的类型签名被认为是一种好习惯,即使它(通常)可以推断出来.看起来这在OCaml中甚至不可能,例如

val add : int -> int -> int ;;
Run Code Online (Sandbox Code Playgroud)

给了我一个错误.(虽然我可以制作type只提供签名的模块.)

  1. 我是否正确,这在OCaml中是不可能做到的?
  2. 如果是这样,为什么?OCaml的类型系统似乎与Haskell完全不同.

syntax ocaml types type-inference

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

静态类型,多态性和专业化

当我第一次学习Haskell时,我很快就开始喜欢参数多态.这是一个令人愉快的简单想法,工作得非常好.整个"如果它编译它通常工作正常"的事情主要是由于参数多态,恕我直言.

但是前几天,我发生了一件事.我可以写成foo多态函数.但是当bar调用时foo,它将使用一组特定的参数类型来完成.或者,如果bar它本身是多态的,那么它的调用者将分配确定的类型.通过归纳,似乎如果您要采用任何有效的Haskell程序并分析整个代码库,您可以静态地确定整个程序中每个事物的类型.

从某种意义上说,这有点像C++模板.没有运行时多态,只有编译时多态.Haskell编译器可以选择为每个调用每个多态函数的类型生成单独的机器代码.大多数Haskell编译器没有,但如果你愿意,你可以实现一个.

只有当你开始添加Haskell扩展(ExistentialQuantification显而易见的是)时,你才开始获得真正的运行时多态性,你可以在其中获得无法静态计算类型的值.

哦,是的,我的问题?

  1. 以上陈述是否真的正确?

  2. 这个属性有广泛使用的名称吗?

haskell types

29
推荐指数
3
解决办法
2335
查看次数