小编Mat*_*ick的帖子

如何制作有限制的类型

例如,我想创建一个整数三元组的MyType类型.但不仅仅是三个整数的笛卡儿积,我希望该类型代表所有(x,y,z),使得x + y + z = 5

我怎么做?除了使用just(x,y),因为z = 5 - x - y

同样的问题,如果我有三个构造函数A,B,C和类型应该是所有(A x,B y,C z),使得x + y + z = 5

haskell dependent-type

25
推荐指数
2
解决办法
2663
查看次数

Haskell中正则表达式的所有匹配

根据一些教程(包括Real World Haskell),可以使用ghci执行以下操作

ghci > :m Text.Regex.Posix
ghci > "foo foo foo" =~ "foo" :: [String]
["foo","foo","foo"]
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试这个时,它会产生

No instance for (RegexContext Regex [Char] [String])
  arising from a use of `=~'
Possible fix:
  add an instance declaration for
  (RegexContext Regex [Char] [String])
In the expression: "abc" =~ "ab" :: [String]
In an equation for `it': it = "abc" =~ "ab" :: [String]
Run Code Online (Sandbox Code Playgroud)

获取haskell中所有匹配列表的正确方法是什么?

regex haskell

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

纯抽象类和接口之间的区别

我和一位同事讨论过,他坚持认为在Java和C#这样的语言中,没有任何理由使用Pure Abstract基类,因为它只是意味着你无法避免缺少多重继承.

我觉得他错了,因为我一直以为如果一个东西是名词那么它就是一个对象,如果它是一个动词那么它就是一个界面.

例如,如果我想定义类型Bird,我想在fly不实现它的情况下强制执行该方法,那么我将使它成为一个纯抽象类.

如果我想定义一个类型Flies,我会把它作为该方法的接口fly.

Bird可能会实施Flies.

我错了吗?

编辑:

我能给予支持我观点的唯一可靠论点是,在未来的某个时刻,设计可能需要改变,以便鸟类可以吃.如果所有的鸟都吃同样的东西,那么就需要添加Bird它,使它成为非纯抽象的.

如果Bird是一个接口,这个改变只会是一场噩梦,因为我不知道从其他基类继承的东西是否也实现了我的Bird接口,所以我不能只重构我的问题.

c# java oop

25
推荐指数
2
解决办法
6218
查看次数

jQuery的val()和prop()方法是否为html-escape值?

我无法找到有关的文件中任何val()prop()和逃逸.

它们是否打算在用作制定者时逃避价值?

html jquery escaping

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

了解Haskell类型签名

我正在自学Haskell,我想知道以下类型的签名:

Prelude> :t ($)
($) :: (a -> b) -> a -> b
Prelude>
Run Code Online (Sandbox Code Playgroud)

我应该如何解释(没有双关语意)?

一个半相似的结果也证明是令人费解的:

Prelude> :t map
map :: (a -> b) -> [a] -> [b]
Prelude>
Run Code Online (Sandbox Code Playgroud)

haskell types type-signature

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

如何使用"setTimeout"来调用对象本身

为什么我不能setTimeout在javascript对象中使用?

Message = function () {

    ...
    ...        

    this.messageFactory = ...
    this.feedbackTag = document.getElementById('feedbackMessages');

    this.addInfo = function (message) {
        var info = this.messageFactory.createInfo(message); // create a div
        this.feedbackTag.appendChild(info);

        setTimeout('this.feedbackTag.removeChild(info)', 5000);
        // why in here, it complain this.feedbacktag is undefined ??????

    };
}
Run Code Online (Sandbox Code Playgroud)

感谢Steve的解决方案,现在如果代码如下所示它将起作用...因为之前'this'实际指向setTimeOut中的函数,它不能重新发送消息.

Message = function () {

    ...
    ...        

    this.messageFactory = ...
    this.feedbackTag = document.getElementById('feedbackMessages');

    this.addInfo = function (message) {
        var info = this.messageFactory.createInfo(message); // create a div
        this.feedbackTag.appendChild(info);

        var _this = this;
        setTimeout(function() { _this.feedbackTag.removeChild(info); }, …
Run Code Online (Sandbox Code Playgroud)

javascript settimeout

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

为什么表达式在Haskell中不受欢迎?

这是一个我一直想知道的问题.如果语句是大多数编程语言中的主要语言(至少是我曾经使用过的语句),但在Haskell中,它似乎很不受欢迎.我理解,对于复杂情况,Haskell的模式匹配比一堆ifs更清晰,但是有什么真正的区别吗?

举一个简单的例子,拿一个自制版本的总和(是的,我知道它可能只是foldr (+) 0):

sum :: [Int] -> Int
-- separate all the cases out
sum [] = 0
sum (x:xs) = x + sum xs

-- guards
sum xs
    | null xs = 0
    | otherwise = (head xs) + sum (tail xs)

-- case
sum xs = case xs of
    [] -> 0
    _ -> (head xs) + sum (tail xs)

-- if statement
sum xs = if null xs then 0 else (head xs) + …
Run Code Online (Sandbox Code Playgroud)

haskell pattern-matching

24
推荐指数
6
解决办法
3567
查看次数

需要一个通用的库,纯C

你能为C推荐一个好的通用数据容器库(纯C,而不是C++)吗?我只需要基本结构,如动态数组,哈希表等.

(注意:"好"我的意思是快速+优雅的界面).

c data-structures

23
推荐指数
6
解决办法
5724
查看次数

功能上的非详尽模式

我有这个代码的问题,它应该计算字符串中相同字母的最长子字符串,但是有一个错误:

*** Exception: test.hs:(15,0)-(21,17): 
Non-exhaustive patterns in function countLongest'
Run Code Online (Sandbox Code Playgroud)

我知道这是错误的类型问题,但我不知道错误在哪里,或者如何查找或调试它

countLongest :: (Eq a) => [a] -> Int
countLongest' :: (Eq a) => Int -> Int -> [a] -> Int

countLongest a = countLongest' 0 0 a
countLongest' n max (y:x:ys)
        | y == x = countLongest' (n+1) max (x:ys)
        | n > max = countLongest' 0 (n) (x:ys)
        | otherwise = countLongest' 0 (max) (x:ys)
countLongest' n max []
        | n > max = n
        | otherwise = max
Run Code Online (Sandbox Code Playgroud)

haskell pattern-matching non-exhaustive-patterns

23
推荐指数
1
解决办法
4万
查看次数

为什么git不允许我安全删除分支?

我需要合并两个分支 - second进入first然后摆脱second.这是我做的:

  • git cloned项目获得新的副本
  • git checkout --track origin/second,做了一些改变,并承诺
  • git checkout --track origin/first,做了一些改变,并承诺
  • git merge second (git说"通过递归合并")
  • git branch -d second

然后git说:

$ git branch -d second
warning: not deleting branch 'second' that is not yet merged to
         'refs/remotes/origin/second', even though it is merged to HEAD.
error: The branch 'second' is not fully merged.
If you are sure you want to delete it, run 'git branch -D second'.
Run Code Online (Sandbox Code Playgroud)

为什么会这样?合并之前我从未收到此消息.合并工作得很好,没有冲突.如何安全删除second分支?

git merge branch

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