小编Eri*_*ikR的帖子

ghc - 命令行上的方括号?

在本页面:

http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/Parsing

它显示了ghc被称为:

ghc -package parsec -o simple_parser [../code/listing3.4.hs listing3.4.hs]
Run Code Online (Sandbox Code Playgroud)

方括号是什么?我在使用ghc 7.0.4时遇到错误.这是为某种方式指定输入文件的搜索路径吗?

haskell ghc

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

建议使用大型哈希表(2 ^ 25个元素)

我想在Haskell中编写一个生日攻击程序,用于SHA1的变体,它只产生50位散列.为此,我需要一个能够存储大约的哈希表.2 ^ 25个条目.

此映射中的键将是Int64,并且值将是短长度字符串(~16字节).

有关使用哈希实现的任何建议吗?

(无视上次更新 - 我需要一个2 ^ 50个元素的数组.)

hash haskell hashmap

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

将类型变量约束为具体类型

我有这个单形代码:

import Data.Array.MArray
import Data.Array.IO (IOUArray)
import Data.Ix (Ix)

push :: IOUArray Int Int -> Int -> [Int] -> IO Int
push stack top [] = return top
push stack top (k:ks) = do
  v <- readArray stack k
  if v >= 0 then push stack top ks
            else do writeArray stack k top
                    push stack k ks
Run Code Online (Sandbox Code Playgroud)

一个完全多态的签名push是:

push :: (MArray a e m, Ix e, Num e)  => a e e -> e -> [e] -> …
Run Code Online (Sandbox Code Playgroud)

polymorphism haskell type-variables

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

在haskell中实现单人纸牌

我想在haskell中实现一个简单的8off单人纸牌游戏,我不太清楚如何定义我的棋盘,以及如何制作一个返回随机起始板的功能.如何修改myBoard和我的数据结构?到现在为止,我有这些:

data Pip = A|TW0|THREE|FOUR|FIVE|SIX|SEVEN|EIGHT|NINE|TEN|J|Q|K  --pip value
       deriving (Eq,Show)
data Suit = S|H|D|C                                              --suit
       deriving (Eq,Show)
type Card = (Pip,Suit)                                           --card
type Deck = [(Card)]                                             --deck
type Foundations = [(Deck)]                                        foundations
type Columns = [(Deck)]                                          --columns
type Reserve = [(Deck)]                                          --reserve
type EOBoard = [(Deck)]

myBoard::Deck->EOBoard
myBoard pack = [shuffle pack]
Run Code Online (Sandbox Code Playgroud)

返回我,这个:

[[(K,D),(TW0,H),(SEVEN,C),(SEVEN,S),(THREE,D),(NINE,S),(THREE,C),(FOUR,H),(THREE,S),(TW0,D),(TW0,C),(FOUR,S),(K,S),(TEN,D),(J,S),(EIGHT,H),(FOUR,D),(NINE,H),(SEVEN,H),(A,S),(SIX,S),(EIGHT,S),(FIVE,S),(FOUR,C),(K,H),(Q,D),(THREE,H),(TEN,H),(A,D),(EIGHT,C),(NINE,D),(Q,H),(J,D),(J,C),(TEN,C),(Q,S),(Q,C),(J,H),(NINE,C),(SIX,C),(FIVE,H),(SEVEN,D),(A,C),(TW0,S),(EIGHT,D),(FIVE,D),(TEN,S),(K,C),(A,H),(SIX,D),(FIVE,C),(SIX,H)]]
Run Code Online (Sandbox Code Playgroud)

haskell

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

为什么括号需要`release`来产生被忽略的结果?

bracket
        :: IO a         -- ^ computation to run first (\"acquire resource\")
        -> (a -> IO b)  -- ^ computation to run last (\"release resource\")
        -> (a -> IO c)  -- ^ computation to run in-between
        -> IO c         -- returns the value from the in-between computation
bracket before after thing =
  mask $ \restore -> do
    a <- before
    r <- restore (thing a) `onException` after a
    _ <- after a
    return r
Run Code Online (Sandbox Code Playgroud)

这与某些API设计模式或约定有关吗?为什么不使用以下部分签名?

        -> (a -> IO ()) …
Run Code Online (Sandbox Code Playgroud)

haskell exception-handling

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

每次调用perl解释器时加载的.pm文件?

我以为我记得在哪里读过perl可以配置为.pm在启动时自动加载某个文件的地方.

我知道PERL5OPT,但对于我的记忆,这是一个特定的文件,如果它存在将被加载.

它是一个可以设置的编译选项(即通过Configure)吗?

perl

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

如何安装unittyped和base-4.6.0.0?

我安装了Haskell Platform 2012.4.0.0,我想尝试使用单元包.

当我尝试安装它时,cabal-dev -s some-dir install unittyped我收到错误:

$ cabal-dev -s some-dir install unittyped
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: unittyped-0.1 (user goal)
next goal: base (dependency of unittyped-0.1)
rejecting: base-3.0.3.2, 3.0.3.1 (global constraint requires installed
instance)
rejecting: base-4.5.1.0/installed-724... (conflict: unittyped => base>=4.6 && <4.7)
rejecting: base-4.6.0.0, 4.5.1.0, 4.5.0.0, 4.4.1.0, 4.4.0.0, 4.3.1.0, 4.3.0.0,
4.2.0.2, 4.2.0.1, 4.2.0.0, 4.1.0.0, 4.0.0.0 (global constraint requires installed instance)
Run Code Online (Sandbox Code Playgroud)

cabal-dev -s some-dir install base-4.6.0.0产生类似的信息.

有没有办法克服这些错误?

haskell cabal haskell-platform

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

由于Haskell运算符优先级,写/这是好/正确的方法?

此代码有效:

40 * sum [1..10]
Run Code Online (Sandbox Code Playgroud)

此代码不会:

40 * sum $ map id [1..10]
Run Code Online (Sandbox Code Playgroud)

我现在理解它是因为这是(40 * sum) (map id [1..10])由于运算符优先级而不是我认为它应该是,这是分组(40 *) (sum (map id [1..10])).

除了使用括号之外,有没有正确的方法在Haskell中编写它?

haskell operators

0
推荐指数
1
解决办法
75
查看次数