小编me2*_*me2的帖子

Haskell不明确的事件 - 如何避免?

我在GHCI做以下事情:

:m + Data.Map
let map = fromList [(1, 2)]
lookup 1 map
Run Code Online (Sandbox Code Playgroud)

GHCI知道map是(Map Integer Integer).那么为什么它在Prelude.lookup和Data.Map.lookup之间声明模糊,当类型清楚时我可以避免吗?

<interactive>:1:0:
    Ambiguous occurrence `lookup'
    It could refer to either `Prelude.lookup', imported from Prelude
                          or `Data.Map.lookup', imported from Data.Map

> :t map
map :: Map Integer Integer
> :t Prelude.lookup
Prelude.lookup :: (Eq a) => a -> [(a, b)] -> Maybe b
> :t Data.Map.lookup
Data.Map.lookup :: (Ord k) => k -> Map k a -> Maybe a
Run Code Online (Sandbox Code Playgroud)

haskell map

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

在Haskell中,是否存在无穷大:: Num a => a?

我正在尝试实现一个数据结构,如果我使用无穷大进行数字比较,那就简单了.请注意,这不是maxBound/minBound,因为值可以<= maxbound,但所有值都是<infinity.

没希望?

haskell infinity

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

Haskell回避概率数据结构?

如果你搜索在Haskell中实现的跳过列表,你将找不到很多.它是一个需要随机数生成器的概率数据结构,这意味着任何这些结构都需要在IO monad中运行.

Haskell人员是否远离这些数据结构,因为它们不可能纯粹实现它们?Haskell如何处理它们?

haskell structure

19
推荐指数
3
解决办法
1747
查看次数

使用Haskell的Parsec来解析二进制文件?

Parsec旨在解析文本信息,但我发现Parsec也适合对包含条件段,无序段等的复杂格式进行二进制文件格式解析.

是否有能力做到这一点或类似的替代方案,这样做?如果没有,Haskell解析二进制文件格式的最佳方法是什么?

binary parsing haskell

13
推荐指数
2
解决办法
3688
查看次数

在没有无关代码的情况下在Haskell中展开数据类型

说我有

x = Just 2
Run Code Online (Sandbox Code Playgroud)

是否有一种方法(最好是内置机制/函数)在单个语句中使用x,这样如果它是Just,则自动解包并使用2,如果它是Nothing,则引发异常?

那是,

(f x) + 2 == 4if x == Just 2,如果是,则引发异常x == Nothing.

haskell coding-style

12
推荐指数
3
解决办法
4317
查看次数

Objective-C Protocol Madness - 如何根据协议返回对象?

@protocol Eating
@end

@interface Eat : NSObject<Eating>
{
}
- (id<Eating> *)me;
@end

@implementation Eat
- (id<Eating> *)me { return self; }
@end
Run Code Online (Sandbox Code Playgroud)

在上面的Objective-C代码中,为什么"返回self"导致"从不兼容的指针类型返回"警告?什么是不兼容的指针类型以及如何解决它?

iphone protocols objective-c

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

如何让Haskell的TChan推迟消息像Erlang的消息队列一样?

考虑以下Erlang代码:

-module(testit).
-export([testit/0]).

testit() ->
    Pid = spawn(fun testit_proc/0),
    Pid ! final,
    Pid ! one,
    Pid ! two,
    io:format("Root finished~n").

testit_proc() ->
    receive
        one     -> io:format("One~n");
        two     -> io:format("Two~n")
    end,
    receive
        one     -> io:format("One~n");
        two     -> io:format("Two~n")
    end,
    receive
        one     -> io:format("One~n");
        two     -> io:format("Two~n");
        final   -> io:format("Final~n")
    end,
    io:format("Spawn finished~n").
Run Code Online (Sandbox Code Playgroud)

输出是:

Root finished
One
Two
Final
Spawn finished
Run Code Online (Sandbox Code Playgroud)

final由于先前的接收模式与该消息不匹配,因此消息的处理基本上被推迟到最后一个接收块.

你如何使用Haskell的TChan做到这一点?

concurrency erlang haskell transactional-memory

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

这是如何构成Haskell刚性类型错误的?

这有效:

data Wrapped a = Wrapped a

alpha :: IO s -> IO ()
alpha x = do
    rv <- wrapit x
    return ()
    where       
        wrapit :: IO s -> IO (Wrapped s)
        wrapit x' = do 
            a <- x'
            return (Wrapped a)
Run Code Online (Sandbox Code Playgroud)

这不是:

data Wrapped a = Wrapped a

alpha :: IO s -> IO ()
alpha x = do
    rv <- wrapit
    return ()
    where       
        wrapit :: IO (Wrapped s)
        wrapit = do 
            a <- x
            return (Wrapped …
Run Code Online (Sandbox Code Playgroud)

haskell types

9
推荐指数
2
解决办法
821
查看次数

在Haskell中,在Lazy ByteString上调用length会强制整个字符串进入内存吗?

我正在使用延迟字节串读取大数据流,并且想要知道在解析它时是否至少有X个字节可用.也就是说,我想知道bytestring是否至少为X字节长.

调用length它会导致整个流加载,从而破坏了使用延迟字节串的目的吗?

如果是,那么后续将是:如何判断它是否至少有X个字节而不加载整个流?

编辑:最初我在阅读文件的上下文中询问,但了解有更好的方法来确定文件大小.然而,我需要的终极解决方案不应该依赖于懒惰的字节串源.

haskell lazy-evaluation bytestring

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

是否有一个Erlang操作系统:cmd等效,它采用字符串列表而不是单个命令?

我可以在哪里打电话给Erlang Retval = subprocess:call(["cmd", "arg1", "arg2", "arg3"])

如果我正在构建一个复杂的命令来执行,使用os:cmd/1可以很容易地逃避错误.比较Python的subprocess.call()方法,我传入一个字符串列表并知道它是逐字传递给子进程的,没有任何损坏.

谢谢.

erlang

8
推荐指数
2
解决办法
1722
查看次数