正如帖子标题所说,我在Haskell中定义了以下函数:
prop_LeftInverse :: (Eq a, Eq b) => [(a,b)] -> Bool
prop_LeftInverse (x,y):(xs,ys) = undefined
Run Code Online (Sandbox Code Playgroud)
应该将元组列表作为输入.我得到了一个,parse error in pattern但我无法弄清楚它是什么,也没有找到关于这个具体案例的任何信息......
为了记录,我是一个Haskell noob.我试图理解为什么范围可以声明为
[1..10] -- yields [1,2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)
并不是
[10..1] -- yields []
Run Code Online (Sandbox Code Playgroud)
看起来很简单,就像这样实现它:
(.:.) :: Enum a => a -> a -> [a]
(.:.) a b =
| a == b = []
| a > b = a : (a - 1) .:. b
| a < b = a : (a + 1) .:. b
Run Code Online (Sandbox Code Playgroud)
我在这里不理解什么?
我是Haskell的新手.
我很难将GHCi的命令结果输出到文件中.我想知道是否有人可以给我一个简单的解释如何做到这一点?到目前为止我在网上找到的例子似乎过于复杂.
我正在尝试在Haskell中为一个基于回合的游戏实现一个服务器.我的选择是使用Yesod进行管理和元信息(比如,用户参与的游戏等等).
我想使用网络套接字来保持游戏内数据开销很小.
看看ws-chat示例,我不确定如何访问Handler Monad并使用Persistent.
对于围绕"普通"处理程序的连接有一些簿记代码是完美的,该处理程序本身更新数据库并通知相关用户.
我有一个以下形式的Java类:
class Example {
private byte[][] data;
public Example(int s) { data = new byte[s][s]; }
public byte getter(int x, int y) { return byte[x][y]; }
public void setter(int x, int y, byte z) { byte[x][y] = z; }
}
Run Code Online (Sandbox Code Playgroud)
我希望能够使用像这样的迭代器外部迭代私有数据:
for(byte b : Example) { ;/* do stuff */ }
我试图实现一个私有的Iterator类,但我遇到了问题:
private class ExampleIterator implements Iterator {
private int curr_x;
private int curr_y;
public ExampleIterator() { curr_x=0; curr_y=-1; }
public boolean hasNext() {
return curr_x != field.length-1
&& curr_y …Run Code Online (Sandbox Code Playgroud) 我会直接了解它 - 有没有办法在Haskell中拥有一个动态大小的恒定时间访问数据结构,就像任何其他命令式语言中的数组一样?
我确信在某个地方有一个模块可以为我们神奇地做到这一点,但我希望能以一种功能性的方式对一个人如何做到这一点的一般解释:)
据我所知,Map使用二叉树表示,因此它具有O(log(n))访问时间,当然列表具有O(n)访问时间.
另外,如果我们这样做它是不可变的,它会是纯粹的,对吧?
任何想法我怎么可能去做(超出Array = Array { one :: Int, two :: Int, three :: Int ...}模板Haskell之类的东西)?
我有一个简单的树结构:
data Tree a = Leaf | Node a (Tree a) (Tree a)
Run Code Online (Sandbox Code Playgroud)
还有一个可折叠的实现:
import qualified Data.Foldable as F
instance F.Foldable Tree where
foldMap f Leaf = mempty
foldMap f (Node x l r) = F.foldMap f l `mappend`
f x `mappend`
F.foldMap f r
Run Code Online (Sandbox Code Playgroud)
和它的作品,即使有对没有实现Monoid,我不能既不使用mappend也不mempty在我的代码.那么这个Foldable实现如何工作?
是什么'[]或':在Haskell代码意味着什么?一些例子 -
data OrderPacket replies where
NoOrders :: OrderPacket '[]
Run Code Online (Sandbox Code Playgroud)
data Elem :: [a] -> a -> * where
EZ :: Elem (x ': xs) x
Run Code Online (Sandbox Code Playgroud) 固定精度整数类型,其范围至少为[-2 ^ 29 .. 2 ^ 29-1].可以通过使用Bounded类中的minBound和maxBound来确定给定实现的确切范围.
这直接来自hackage.haskell.org.
根据hackage.haskell.org和learnyouahaskell.com的说法,我应该得到的是-2147483648为了minBound和2147483648为maxBound.
当我自己实际运行它时,我得到了这个结果:
如果这是一个非常愚蠢的问题,请道歉.我是Haskell的新手,正在测试看看它是如何工作的.
难道我做错了什么?
以下是结构感应的定义吗?
foldr f a (xs::ys) = foldr f (foldr f a ys) xs
Run Code Online (Sandbox Code Playgroud)
有人能给我一个Haskell结构感应的例子吗?