小编Cal*_*mer的帖子

像OCaml一样的Haskell私人记录

在OCaml模块签名中,我可以写:

type monotype = private {
  monotype_free_variables: StringSet.t Lazy.t;
  monotype_description: monotype_description;
}
Run Code Online (Sandbox Code Playgroud)

(注意使用private.)

这允许导入我的模块的代码模式匹配字段,monotype_description但不允许代码导入我的模块来构造记录.

我可以在Haskell中编写具有类似访问权限的代码吗?我想monotypeDescription在不允许记录构造的情况下对场进行模式匹配.

我知道PatternSynonyms存在语言扩展,但我不知道如何使用它.如果可以的话,我也更喜欢更简单的解决方案.

haskell record

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

aria-hidden = true是否意味着您不必使用display:none?

我听说应用于display:none不可见的东西比更改不透明度更容易理解.然而,使用display:none了一些我的css动画,这些动画逐渐分层到核心功能上.

如果在我的css中隐藏了元素opacity:0并赋予元素aria-hidden=true角色,或元素是否也具有display:none

要考虑的另一个因素是:hover在这种情况下,aria角色由javascript控制(css具有伪类回退).所以对于没有javascript的环境,元素只会被隐藏opacity:0.

html javascript accessibility wai-aria web

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

如何创建一个可以在单个单词大小内保存整数或指针的 Rust 类型?

(I\xe2\x80\x99m 指的是装箱作为在运行时区分整数和指针的一种方式。一种技术使用一些编程语言来帮助 GC,如OCaml。不是 RustBox<T>类型。)

\n\n

我有一个 Rust 枚举,如下所示:

\n\n
#[derive(Clone, Copy, Debug, PartialEq)]\nenum Type<\'ts> {\n    TVar(usize),\n    Constructed(&\'ts ConstructedType<\'ts>),\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

据我了解,这个枚举的内存布局将是两个单词。一份用于标签,一份用于有效负载。如果可能的话,我想用一个词来表达记忆。

\n\n

像OCaml这样的语言使用一种名为 \xe2\x80\x9cinteger boxing\xe2\x80\x9d 的技术,它利用了指针对齐的事实。这意味着最低位将为 0。如果将整数中的位向左移动一位并将整数的最低位设置为 1,则您\xe2\x80\x99 将使用该位作为标记,但代价是一位整数精度。

\n\n

Rust 指针保证对齐吗?我如何在 Rust 中为我的类型实现这种技术?

\n

optimization ocaml pointers rust union-types

3
推荐指数
1
解决办法
965
查看次数

作者monad的列表效率如何?

list(Writer [w] a)上的Haskell编写器monad的实现将用于++添加项目.所以,如果我在列表编写器monad中编写此代码:

do
  tell [a, b, c]
  tell [d]
Run Code Online (Sandbox Code Playgroud)

列表将附上[a, b, c] ++ [d].在OCaml中工作之后,我已经内化了列表应该使用cons运算符(:)而不是连接运算符(++)来构建,因为后者在其第一个参数中是O(n).

我的工作量一次向作者monad添加一条"消息",因此第二个参数++通常是单例列表.

在Haskell中,懒惰会使列表编写者monad比像OCaml这样的热切语言更有效吗?如果不是,对我的工作量来说什么是有效的替代方案?

monads haskell linked-list writer

3
推荐指数
1
解决办法
117
查看次数

Web音频API使用AnalyserNode创建峰值计

什么是实现一个正确的方法峰值表像那些在Logic Pro中使用的网络音频API AnalyserNode

我知道会AnalyserNode.getFloatFrequencyData()返回分贝值,但是如何将这些值组合起来才能在仪表中显示呢?您是否像下面的代码示例一样取最大值(其中analyserData来自getFloatFrequencyData()

let peak = -Infinity;
for (let i = 0; i < analyserData.length; i++) {
  const x = analyserData[i];
  if (x > peak) {
    peak = x;
  }
}
Run Code Online (Sandbox Code Playgroud)

仅通过获取最大值来检查一些输出,就好像这不是正确的方法。我错了吗?

或者,使用a ScriptProcessorNode代替会更好吗?这种方法有何不同?

javascript audio web-audio-api

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