小编ham*_*mar的帖子

为什么Haskell在声明类实例时不允许使用Type Synonyms?

虽然我知道GHC 中有一个TypeSynonymInstances扩展,我不知道它是多么"危险",我想知道这种限制是否是任意的,有点像单态限制,或者是否有更深层次的原因.

haskell typeclass

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

什么是Haskell的monad变换器的分类术语?

作为一名数学学生,我在Haskell学习monads时所做的第一件事就是检查它们是否真的是我知道的monad.但后来我了解了monad变换器,而那些似乎并不是类别理论研究的东西.

特别是我希望它们与分配法有关,但它们似乎真正不同:monad变换器预计适用于任意monad,而分配法则是monad和特定其他monad之间的事情.

另外,在看单子变压器的通常实施例中,而MaybeT m构成mMaybe,StateT m不是的组合物mState任一次序.

所以我的问题是什么是分类语言中的monad变换器?

haskell monad-transformers category-theory

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

数据类型中严格字段的​​优点

这可能现在有点模糊,但我一直在想这一段时间.据我所知!,可以确保在构造值之前评估数据构造函数的参数:

data Foo = Bar !Int !Float
Run Code Online (Sandbox Code Playgroud)

我经常认为懒惰是一件好事.现在,当我浏览消息来源时,我会看到比非!变体更严格的字段.

这有什么好处,为什么我不应该把它保持懒惰呢?

haskell strictness

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

unboxed类型和严格性之间的关系是什么?

未装箱的类型,比如Int#,和严格的功能,f (!x) = ...是不同的,但我看到概念上的相似性 - 他们在某种程度上不允许暴力/懒惰.如果Haskell是像Ocaml这样的严格语言,那么每个函数都是严格的,并且每个类型都是未装箱的.unboxed类型与强制执行之间的关系是什么?

evaluation haskell lazy-evaluation strictness

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

如何在Haskell中编写递归的lambda表达式?

我不确定这是不是很好的编程实践,但我想知道是否可以使用lambda表达式定义递归函数.

这是我编写的一个人为例子:因此可以递归地定义Haskell中的阶乘函数,如下所示

factorial :: Integer -> Integer 
factorial 1 = 1
factorial (n + 1) = (n + 1) * factorial n
Run Code Online (Sandbox Code Playgroud)

现在,我想要一个f这样的功能f n = (factorial n) + 1.factorial n我想要定义f在定义中factorial n给出lambda表达式的位置,而不是使用名称(即,事先定义它)f.我可以使用递归lambda定义f代替使用名称factorial吗?

recursion lambda haskell

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

Ping Pong与Haskell和Thrift陷入困境

我正在尝试使用Haskell和Thrift做一个简单的Ping Pong.但是,它只会重复一次,然后就会卡住.我假设问题出在正确使用Thrift而不是Haskell中.可能没有正确刷新的东西.是否有任何有Thrift经验的人可以帮助我做出有关如何解决这个问题的有根据的猜测?

服务器:

echorequest :: TXT
echorequest = TXT {
    f_TXT_anytxt = Just "Ping"
    }

echoreply :: TXT
echoreply = TXT {
    f_TXT_anytxt = Just "Pong"
    }

serverFunc :: a -> (BinaryProtocol Handle, BinaryProtocol Handle)
              -> IO Bool
serverFunc a (h1,h2) = do
  let t1 = getTransport h1
  dat <- read_TXT h1
-- the following two lines are only for debugging
  putStrLn "Recieved data:"
  print dat
  write_TXT h1 echoreply
  tFlush t1
-- the following line is for debugging
  putStrLn "Data …
Run Code Online (Sandbox Code Playgroud)

haskell thrift

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

我什么时候必须将我的方法视为Scala中的部分应用函数?

我注意到当我使用期望其他函数作为参数的函数时,我有时可以这样做:

someFunction(firstParam,anotherFunction)
Run Code Online (Sandbox Code Playgroud)

但其他时候,编译器给我一个错误,告诉我应该编写一个这样的函数,以便将它视为部分应用的函数:

someFunction(firstParam,anotherFunction _)
Run Code Online (Sandbox Code Playgroud)

例如,如果我有这个:

object Whatever {
    def meth1(params:Array[Int]) = ...
    def meth2(params:Array[Int]) = ...
}

import Whatever._
val callbacks = Array(meth1 _,meth2 _)
Run Code Online (Sandbox Code Playgroud)

为什么我不能拥有如下代码:

val callbacks = Array(meth1,meth2)
Run Code Online (Sandbox Code Playgroud)

在什么情况下编译器会告诉我添加_

scala function partial-application

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

25
推荐指数
3
解决办法
5211
查看次数

在做GHC解释器的某些情况下只有空间泄漏:concat <some list> !! ñ

我定义我自己的版本concat,myConcat:

module Eh where

myConcat []          = []
myConcat ([]:os)     = myConcat os
myConcat ((x:xs):os) = x : myConcat (xs:os)

(!!!)  :: [a] -> Int -> a
xs     !!! n | n < 0 = error "negative index"
[]     !!! _         = error "index too large"
(x:_)  !!! 0         = x
(_:xs) !!! n         = xs !!! (n-1)
Run Code Online (Sandbox Code Playgroud)

如果我myConcat <some huge list> !! n使用GHC解释器,它会以300MB/s的速度窃取我的内存,而且我必须在它召唤OOM杀手之前杀死它.请注意,我加载Eh为"解释",我在加载之前不编译它.

code run in the GHC interpreter        space leak? …

haskell ghc

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

尝试使用Cabal安装ghc-mod时ExitFailure 9

当我尝试用cabal安装它时,我明白了

~$ cabal install ghc-mod
Resolving dependencies...
[1 of 1] Compiling Main             ( /tmp/haskell-src-exts-1.13.5-21238/haskell-src-exts-1.13.5/Setup.hs, /tmp/haskell-src-exts-1.13.5-21238/haskell-src-exts-1.13.5/dist/setup/Main.o )

/tmp/haskell-src-exts-1.13.5-21238/haskell-src-exts-1.13.5/Setup.hs:1:1:
    Warning: In the use of `runTests'
             (imported from Distribution.Simple, but defined in Distribution.Simple.UserHooks):
             Deprecated: "Please use the new testing interface instead!"
Linking /tmp/haskell-src-exts-1.13.5-21238/haskell-src-exts-1.13.5/dist/setup/setup ...
Configuring haskell-src-exts-1.13.5...
Building haskell-src-exts-1.13.5...
Preprocessing library haskell-src-exts-1.13.5...

dist/build/Language/Haskell/Exts/InternalParser.hs:1:12:
    Warning: -fglasgow-exts is deprecated: Use individual extensions instead
[ 1 of 22] Compiling Language.Haskell.Exts.Annotated.Syntax ( src/Language/Haskell/Exts/Annotated/Syntax.hs, dist/build/Language/Haskell/Exts/Annotated/Syntax.o )
cabal: Error: some packages failed to install:
ghc-mod-1.11.1 depends on haskell-src-exts-1.13.5 which failed …
Run Code Online (Sandbox Code Playgroud)

haskell cabal

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