的空隙包声称提供适合居住型称为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数据类型实际上是无人居住的.
会有用吗还是我错过了什么?
到目前为止,我使用以下内容来禁用/启用表单字段 -
$('#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.
Web上的HTML5有一些非常好的资源,比如Dive Into HTML5和http://slides.html5rocks.com,我已经使用了我自己的应用程序中提到的许多功能,所以我不习惯使用HTML5.
但随着我对HTML5功能的研究越来越深入,我不断发现越来越多的被归类为"HTML5"标题的东西.我听说过的最新版本是keygen标签,它允许您轻松地在客户端生成公共私钥对.我很高兴这个标签存在并且还有点不安,直到几个小时前我才知道它的存在.
那么在网络上的任何地方都有完整的HTML5功能列表吗?我知道http://www.w3.org/TR/html5/上的工作草案,但我正在寻找一些关键而且易于理解的东西,而不必筛选大量的技术术语.
首先有一点背景 - 当我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有机会保存下载状态.问题是 - 它是什么?
编辑
这些是我到目前为止收到的建议,但没有雪茄.神秘加深了! -
在sudo kill -2 $!该信号可能会sudo代替apt-get.这不是原因,因为如上所述我也尝试将SIGINT专门发送到apt-get的PID,甚至阻止apt-get保存其状态.
Sudo捕获信号并向apt-get发送一些其他信号.我试着发送apt-get所有我能想到的信号!它仍然没有恢复其中任何一个的下载.它只在我执行Ctrl-C杀死它时才恢复下载.
如果来自脚本而不是交互式shell,则Apt-get处理SIGINT的方式不同.再次,上面的"实验"证明这不是真的.
我一直在使用Free的数据类型Control.Monad.Free从free包.现在我想将其转换为使用F中Control.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) 我正在尝试理解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) 我正在查看文档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实例.然而,Traversable有Functor一个超类.
class (Functor t, Foldable t) => Traversable t where
...
Run Code Online (Sandbox Code Playgroud)
因此,如果不先定义Traversable实例,就无法定义Functor实例!无论你有什么Traversable,你都可以访问fmap,这相当于(也许更有效)fmapDefault.
那么人们会在哪里使用fmapDefault,而不是更熟悉fmap?
是什么'[]或':在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) 我最近构建了一个小的,单文件的Haskell实用程序,包含在我原本纯粹的PHP(凸起的眉毛,我知道)项目的"工具"部分中.
最初我检查了.hs源文件以及我的Linux开发机器上生成的二进制文件到我们使用的版本控制系统(Git).但是现在我想更多关于它,我想创建跨平台的makefile,以便其他开发人员可以轻松地在他们的系统上编译它.
是否有一些最佳实践/指南,甚至更好的Makefile模板,我可以下载?没什么好看的,只是允许开发人员指定他们的GHC设置的一些细节并运行一个简单的脚本来开始.
我在计划中与存在主义类型斗争.我想我正在尝试做一些非常合理的事情但是我无法超越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 ×7
apt ×1
bash ×1
cabal ×1
concurrency ×1
free-monad ×1
functor ×1
html5 ×1
javascript ×1
jquery ×1
kill ×1
makefile ×1
process ×1
reference ×1
sigint ×1
syntax ×1
traversable ×1
typechecking ×1
typeclass ×1
typeerror ×1
zipper ×1