小编Mar*_*tos的帖子

Haskell运算符的交换属性?

有没有办法说明运算符是可交换的,所以我不必为两个方向给出相同的定义?例如:

data Nat = Zero | Succ Nat

(+) :: Nat -> Nat -> Nat
Zero + x = x
x + Zero = x
...
Run Code Online (Sandbox Code Playgroud)

在这里,有没有一种方法可以让我不必同时给出这两种定义,其中一种定义会从另一种定义中暗示出来?有没有办法说明这一点fn = flip fn

haskell operators pattern-matching commutativity

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

无法转换为`AnyObject?`?

在创建一个快速的iOS应用程序时,我需要在父视图控制器之外处理UIButton印刷机的事件,所以我创建了一个(非常简单的)协议来将该责任委托给另一个类:

import UIKit
protocol MyButtonProtocol {
    func buttonPressed(sender: UIButton)
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将addTarget添加到具有该协议的UIButton时,我收到此错误:Cannot convert value of type 'MyButtonProtocol' to expected argument type 'AnyObject?'.不应该有任何东西可以转换成AnyObject??这是我的主要代码:

import UIKit
class MyView: UIView {
    var delegate: MyButtonProtocol
    var button: UIButton
    init(delegate: MyButtonProtocol) {
        self.delegate = delegate
        button = UIButton()
        //... formatting ...
        super.init(frame: CGRect())
        button.addTarget(delegate, action: "buttonPressed:", forControlEvents: .TouchUpInside)
        addSubview(button)
        //... more formatting ...
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

delegates ios swift

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

如何对数据类型构造执行检查

对于数据类型构造函数,有没有办法根据构造函数的参数类型以外的条件限制"对象"(我不知道正确的术语)的创建?

例如:

data UInt = UInt Int --the int must be >= 0
Run Code Online (Sandbox Code Playgroud)

确实,我想为矩形多维列表创建一个数据类型(其中所有子列表具有相同的长度).一类或其他技术会更适合这种情况吗?

haskell

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

如何模式匹配列表的结尾?

假设我想删除列表末尾的所有零:

removeEndingZeros :: (Num a, Eq a) => [a] -> [a]
removeEndingZeros (xs ++ [0]) = removeEndingZeros xs
removeEndingZeros xs          = xs
Run Code Online (Sandbox Code Playgroud)

由于(++)参数中的运算符,这不起作用.如何通过模式匹配确定列表的结尾?

haskell pattern-matching pattern-synonyms

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

在多个项目中重用Haskell代码

我写的一些模块经常要复制到其他项目中以重用代码.但是,如果我只是复制模块,那么如果我想要改进它们,我将不得不更新各种git存储库中用于使用它们的项目的所有副本.

好像我应该创建某种类型的库.如何设置我的项目,以便我只需要更新一次这些模块,并且所有依赖它们的存储库都可以访问最新版本?

git code-reuse haskell

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