小编abe*_*sto的帖子

寻求对monad实施的建设性批评

我正在学习monad,这是我的第一个工作(除了琐碎的monad).随意批评其中的一切无情.我对"更惯用"和"更优雅"的回应特别感兴趣.

该monad计算执行的绑定数.

data C a = C {value :: a, count :: Int} deriving (Show)

instance Monad C where
    (>>=) (C x c) f = C (value $ f x) (c + 1)
    return x = C x 0

add :: (Num a) => a -> a -> C a
add x y = return $ x + y

-- Simpler way to do this? foldM is obviously something different.
mysum [x] = return x
mysum (x:xs) = mysum xs …
Run Code Online (Sandbox Code Playgroud)

monads haskell idiomatic

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

PHPDoc和__callStatic

TL;博士

注释(在PHPDoc中)通过实现的函数的正确方法是什么__callStatic?更重要的是:有没有办法让NetBeans PHPStorm理解这些是静态方法?

动机

如果你想要更大的图片,这就是我对这个问题的看法.

问题:在我目前的项目中,我们有很多类应该是单例(DB代理等).不用说,我们至少有几百require_once$foo = new FooProxy();线.

解决方案:我创建了一个Loader类来解决这个问题,使用__callStatic魔术方法,所以我们可以说$foo = Loader::FooProxy();.它非常适合我们的目的,但是:

问题:这种方式在团队中使用的IDE中显然没有类型提示.

解决方案:每个模块定义一个子类Loader,添加仅路由到的方法__callStatic.

问题:为了自动完成而添加实际解释的代码是不可接受的(这可以争论,但让我们暂时接受它).

解决方案:我们不添加任何实际方法,只需在PHPDoc中声明方法如下:

<?php
/**
 * @method FooProxy FooProxy()
 */
 class BarLoader extends Loader {}
?>
Run Code Online (Sandbox Code Playgroud)

问题:FooProxy不是静态方法.以下所有内容都不会使其成为静态:

<?php
/**
 * @static
 * @method FooProxy FooProxy()
 */

///////////////

/**
 * @static @method A A()
 * @method static A A()
 * @method A …
Run Code Online (Sandbox Code Playgroud)

php phpdoc magic-methods

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

PyCharm,Django:零代码覆盖率

PyCharm为Django测试目标提供了"Run with Coverage"操作.这将运行测试,但显示零测试覆盖率(0%文件,项目窗格中未涵盖,编辑器中全部为红色).选中或取消选中"使用捆绑的coverage.py"没有任何区别.

从CLI运行相同的测试会得到预期的结果:

$ coverage --version
Coverage.py, version 3.5.1.  http://nedbatchelder.com/code/coverage


$ coverage run ./manage.py test blackbox
Creating test database for alias 'default'...
....
----------------------------------------------------------------------
Ran 4 tests in 0.002s

OK
Destroying test database for alias 'default'...


$ coverage report
Name                      Stmts   Miss  Cover
---------------------------------------------
__init__                      0      0   100%
blackbox/__init__             0      0   100%
blackbox/models               5      0   100%
blackbox/rules/__init__       1      0   100%
blackbox/rules/board         62     19    69%
blackbox/tests               49      6    88%
manage                       11      4    64%
settings                     24      0   100%
---------------------------------------------
TOTAL                       152 …
Run Code Online (Sandbox Code Playgroud)

python django code-coverage pycharm

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

Yesod删除级联

根据http://www.yesodweb.com/blog/2010/07/database-migrations,DeleteCascade几年前添加了一个类型类.我只能假设这是为了添加到模型中.设置我的模型配置后像这样:

Field
    ...
    foreignId ForeignId DeleteCascade
Run Code Online (Sandbox Code Playgroud)

我的申请编译得很好.但是数据库模式没有改变,删除也不是由应用程序级联的.我应该(颤抖)手动做吗?有没有更好的办法?

我正在使用Yesod脚手架(Application.hs,Foundation.hs,Settings.hs,...)

haskell yesod

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

提交的分支列表出现在

使用GitHub API(v3)我想弄清楚提交出现在哪些分支上.我没有找到通过repo提交或提交数据对象直接查询它的方法.另一种解决方案是列出所有分支,并与其HEAD进行比较; 我想如果提交不在给定分支上,则比较将失败.

是否通过当前的API支持,我只是错过了它?如果没有,你有(更好的)解决方法吗?

github github-api

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

Yesod中的基本HTTP身份验证

我有一个小的Yesod应用程序(使用脚手架).我想为所有请求添加基本的HTTP身份验证.这是我到目前为止所尝试的:

  • 我已经阅读了有关Yesod身份验证的文档,但遗憾的是没有后端支持这一点.
  • isAuthorized 会很棒,但我看不到有办法阅读那里的标题.
  • WAI中间件会很优雅,但我找不到任何文档描述如何使用完整的Yesod应用程序.同样很清楚,写一个并不是完全无足轻重的.

这已经完成了吗?我该怎么做呢?

haskell yesod

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