小编Anu*_*ain的帖子

不必要的类型杂耍定义Data.Void(Hackage上的包"void")?

空隙包声称提供适合居住型称为Void,其定义如下: -

newtype Void = Void Void
Run Code Online (Sandbox Code Playgroud)

这个定义比使用更简单的东西更好吗?说 -

data Void
Run Code Online (Sandbox Code Playgroud)

如果我的理解是正确的,那么两种数据类型都只包含底值.然而,后者更容易理解.

编辑:好的,所以我理解丹尼尔的答案如下.但是我想到了另一种可能更简单的方法来保持Haskell98兼容.我们可以使用Abstract数据类型,并且不向用户公开构造函数.

module Data.Void (Void) where
  data Void = Void
Run Code Online (Sandbox Code Playgroud)

现在只有Data.Void模块中的代码可以构造一个Void,但是因为我们知道它没有,所以Void数据类型实际上是无人居住的.

会有用吗还是我错过了什么?

haskell

12
推荐指数
2
解决办法
618
查看次数

jQuery似乎有一个启用功能,但不是一个禁用功能.为什么?

到目前为止,我使用以下内容来禁用/启用表单字段 -

$('#fieldid').attr('disable','disable');
$('#fieldid').removeAttr('disable');
Run Code Online (Sandbox Code Playgroud)

这完成了工作.但是昨天,我心不在焉地打了下面这个字段 -

$('#fieldid').enable();
Run Code Online (Sandbox Code Playgroud)

它奏效了!我静静地踢自己没有尝试得心应手"启用"建成的jQuery(或因此我认为)/"禁用"功能,并着手修改,以禁止线 -

$('#fieldid').disable();
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,这不起作用.

我错过了什么吗?为什么定义了enable()函数但是disable()函数不是?甚至更奇怪,我在jquery文档中没有提到enable()或disable().有没有人有任何解释?

我正在使用jQuery 1.6.

javascript jquery

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

完整的HTML5功能列表?

Web上的HTML5有一些非常好的资源,比如Dive Into HTML5http://slides.html5rocks.com,我已经使用了我自己的应用程序中提到的许多功能,所以我不习惯使用HTML5.

但随着我对HTML5功能的研究越来越深入,我不断发现越来越多的被归类为"HTML5"标题的东西.我听说过的最新版本是keygen标签,它允许您轻松地在客户端生成公共私钥对.我很高兴这个标签存在并且还有点不安,直到几个小时前我才知道它的存在.

那么在网络上的任何地方都有完整的HTML5功能列表吗?我知道http://www.w3.org/TR/html5/上的工作草案,但我正在寻找一些关键而且易于理解的东西,而不必筛选大量的技术术语.

html5 reference

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

当您执行Ctrl-C时,BASH会发生什么(提示,它不仅仅是发送SIGINT)

首先有一点背景 - 当我apt-get install从我公司的互联网上下载时,它会在前10秒左右提供高速(400-500KB/s),然后下降到十分之一(40-50KB/s),然后几分钟后真正悲惨(4-5KB/s).这让我觉得系统管理员已经实现了某种网络限制方案.

现在我知道网络不是简单的不稳定,因为如果我开始apt-get install foo,Ctrl-C它会在10秒后立即apt-get install foo再次运行(通过向上箭头并输入以使用bash历史记录),然后继续重复此过程几分钟直到所有包都下载了,我甚至可以非常快速地下载大包.特别是,即使在使用Ctrl-C中止下载后,apt-get似乎也能够在下次调用时恢复下载.

当然,盯着屏幕每隔10秒做一次Ctrl-C Up Enter真的很快,所以我写了一个shell脚本 -

#!/bin/sh
for i in `seq 1 100` ; do
    sudo apt-get install foo -y &
    sleep 10
    sudo kill -2 $!
done
Run Code Online (Sandbox Code Playgroud)

这似乎有效.它产生apt-get,运行10秒然后杀死(通过发送SIGINT)并再次启动它.但是,它并没有真正起作用,因为现在apt-get不会在后续调用中恢复下载!

sudo apt-get install foo从一个终端运行然后kill -2 <PID of apt-get>从另一个终端运行的实验.即使在这种情况下,当我重新启动apt-get时,它也不会恢复下载.

很明显,Ctrl-C 等同于SIGINT.当我手动执行Ctrl-C时会发生其他事情,这会让apt-get有机会保存下载状态.问题是 - 它是什么?

编辑

这些是我到目前为止收到的建议,但没有雪茄.神秘加深了! -

  1. sudo kill -2 $!该信号可能会sudo代替apt-get.这不是原因,因为如上所述我也尝试将SIGINT专门发送到apt-get的PID,甚至阻止apt-get保存其状态.

  2. Sudo捕获信号并向apt-get发送一些其他信号.我试着发送apt-get所有我能想到的信号!它仍然没有恢复其中任何一个的下载.它只在我执行Ctrl-C杀死它时才恢复下载.

  3. 如果来自脚本而不是交互式shell,则Apt-get处理SIGINT的方式不同.再次,上面的"实验"证明这不是真的.

bash apt kill process sigint

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

如何使用免费Monads的Church编码?

我一直在使用Free的数据类型Control.Monad.Freefree包.现在我想将其转换为使用FControl.Monad.Free.Church,但无法弄清楚如何将功能映射.

例如,使用的简单模式匹配函数Free看起来像这样 -

-- Pattern match Free
matchFree
  :: (a -> r)
  -> (f (Free f a) -> r)
  -> Free f a
  -> r
matchFree kp _ (Pure a) = kp a
matchFree _ kf (Free f) = kf f
Run Code Online (Sandbox Code Playgroud)

我可以轻松地将其F转换为通过转换为/从Free- 使用的函数

-- Pattern match F (using toF and fromF)
matchF
  :: Functor f
  => (a -> r)
  -> (f (F f a) …
Run Code Online (Sandbox Code Playgroud)

haskell church-encoding free-monad scott-encoding

9
推荐指数
3
解决办法
988
查看次数

帮助理解Haskell中的MVar示例

我正在尝试理解GHC最新文档中的MVar示例-

data SkipChan a = SkipChan (MVar (a, [MVar ()])) (MVar ())

newSkipChan :: IO (SkipChan a)
newSkipChan = do
     sem <- newEmptyMVar
     main <- newMVar (undefined, [sem])
     return (SkipChan main sem)

putSkipChan :: SkipChan a -> a -> IO ()
putSkipChan (SkipChan main _) v = do
     (_, sems) <- takeMVar main
     putMVar main (v, [])
     mapM_ (sem -> putMVar sem ()) sems

getSkipChan :: SkipChan a -> IO a
getSkipChan (SkipChan main sem) = do
     takeMVar …
Run Code Online (Sandbox Code Playgroud)

concurrency haskell

8
推荐指数
1
解决办法
1477
查看次数

'Data.Traversable'中'fmapDefault'的重点是什么?

我正在查看文档Data.Traversable并发现fmapDefault- https://downloads.haskell.org/~ghc/latest/docs/html/libraries/base/Data-Traversable.html#g:3

fmapDefault :: Traversable t => (a -> b) -> t a -> t b
Run Code Online (Sandbox Code Playgroud)

文件说明 -

如果定义了遍历,则此函数可用作Functor实例中fmap的值.

所以可能它可以用于派生fmap一个Traversable实例.然而,TraversableFunctor一个超类.

class (Functor t, Foldable t) => Traversable t where
    ...
Run Code Online (Sandbox Code Playgroud)

因此,如果不先定义Traversable实例,就无法定义Functor实例!无论你有什么Traversable,你都可以访问fmap,这相当于(也许更有效)fmapDefault.

那么人们会在哪里使用fmapDefault,而不是更熟悉fmap

haskell functor typeclass traversable

8
推荐指数
1
解决办法
133
查看次数

什么是Haskell语法(类型级别运算符?)

是什么'[]':在Haskell代码意味着什么?一些例子 -

例1:

data OrderPacket replies where
  NoOrders :: OrderPacket '[]
Run Code Online (Sandbox Code Playgroud)

例2:

data Elem :: [a] -> a -> * where
  EZ :: Elem (x ': xs) x
Run Code Online (Sandbox Code Playgroud)

syntax haskell type-level-computation

8
推荐指数
1
解决办法
316
查看次数

用于小型Haskell项目的跨平台makefile?

我最近构建了一个小的,单文件的Haskell实用程序,包含在我原本纯粹的PHP(凸起的眉毛,我知道)项目的"工具"部分中.

最初我检查了.hs源文件以及我的Linux开发机器上生成的二进制文件到我们使用的版本控制系统(Git).但是现在我想更多关于它,我想创建跨平台的makefile,以便其他开发人员可以轻松地在他们的系统上编译它.

是否有一些最佳实践/指南,甚至更好的Makefile模板,我可以下载?没什么好看的,只是允许开发人员指定他们的GHC设置的一些细节并运行一个简单的脚本来开始.

haskell cross-platform makefile cabal

7
推荐指数
1
解决办法
1767
查看次数

在Haskell中使用存在类型键入错误

我在计划中与存在主义类型斗争.我想我正在尝试做一些非常合理的事情但是我无法超越typechecker :(

我有一种模仿Monad的数据类型

data M o = R o | forall o1. B (o1 -> M o) (M o1)
Run Code Online (Sandbox Code Playgroud)

现在我为它创建一个Context,类似于关于Zipper的Haskell Wiki文章中描述的,但是为简单起见,我使用函数而不是数据结构 -

type C o1 o2 = M o1 -> M o2
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试编写一个将数据值拆分为其上下文和子值的函数时,类型检查器会抱怨 -

ctx :: M o -> (M o1 -> M o, M o1)
ctx (B f m) = (B f, m) -- Doesn't typecheck
Run Code Online (Sandbox Code Playgroud)

错误是 -

Couldn't match type `o2' with `o1'
  `o2' is a rigid type variable bound by
       a pattern with constructor
         B …
Run Code Online (Sandbox Code Playgroud)

haskell typechecking typeerror existential-type zipper

7
推荐指数
1
解决办法
295
查看次数