小编bma*_*ddy的帖子

这是什么类型的数学:a - > b - > c

在查看Haskell时,我经常会看到与此类似的类型声明:

a -> (b -> c)
Run Code Online (Sandbox Code Playgroud)

我理解它描述了一个函数,它接受类型为a的东西并返回一个新函数,它接受类型为b的东西并返回类型为c的东西.我也明白类型是关联的(编辑:我错了 - 看下面的评论),所以上面的内容可以像这样重写,以获得相同的结果:

(a -> b) -> c
Run Code Online (Sandbox Code Playgroud)

这将描述一个函数,它接受类型为a的东西和类型为b的东西并返回类型为c的东西.

我还听说你可以通过切换箭头来补充(编辑:真的,我在这里找到的词是双重的 - 请参阅下面的评论)到函数:

a <- b <- c
Run Code Online (Sandbox Code Playgroud)

我认为相当于

c -> b -> a
Run Code Online (Sandbox Code Playgroud)

但我不确定.

我的问题是,这种数学的名称是什么?我想了解更多关于它的信息,以便我可以用它来帮助我编写更好的程序.我有兴趣学习类似于补充函数的东西,以及可以对类型声明执行的其他转换.

谢谢!

math monads haskell types

7
推荐指数
2
解决办法
1257
查看次数

Redis是否同步更新?

如果我将某些东西放到Redis的列表中,然后从该列表弹出,是否可以保证我将获得之前推送的项目,或者是否可以在写入之前进行读取?

redis

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

如何在clojurescript中使用破折号获取属性?

我在一个javascript对象中有一个名为'user-agent'的属性,我希望得到它的值.我如何在clojurescript中做到这一点?

(js/eval "a = {'user-agent': 'curl/7.22.0'}")
(js/eval "a['user-agent']") ;=> curl/7.22.0
(.-user-agent js/a) ;=> (returns nothing)
(. js/a -user-agent) ;=> (returns nothing)
Run Code Online (Sandbox Code Playgroud)

这是因为在这里使用点表示法而不是括号表示法检索属性吗?https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/compiler.clj#L734

clojure clojurescript

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

你如何在clojurescript中使用edn阅读器创建的地图?

这正如我所期望的那样:barClojure中打印:

(println (:foo (clojure.tools.reader.edn/read-string "{:foo :bar}")))
;=> :bar
Run Code Online (Sandbox Code Playgroud)

但这打印nilClojureScript中:

(println (:foo (cljs.reader/read-string "{:foo :bar}")))
;=> nil
Run Code Online (Sandbox Code Playgroud)

为了让事情变得陌生,我会按照我的预期:barClojureScript中打印:

(let [data (cljs.reader/read-string "{:foo :bar}")]
  (println ((first (keys data)) data )))
;=> :bar
Run Code Online (Sandbox Code Playgroud)

如何访问读者创建的地图中的值?这是一个字符编码的东西吗?

编辑

这是注释中请求的命名空间:

(ns clojuresite.homepage
  (:require-macros [hiccups.core :as hiccups])
  (:require [hiccups.runtime :as hiccupsrt]
            [cljs.nodejs :as node]
            [cljs.reader :as reader]))
Run Code Online (Sandbox Code Playgroud)

clojure clojurescript edn

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

这是什么类型的镜头组合?

我正在用Ruby制作一个镜头组合器,我无法弄清楚它的普遍接受的名称是什么.未知函数组成两个具有相同源类型和目标类型的镜头(使用 Benjamin C. Pierce的术语)是一个哈希映射.未知功能接收这两个镜头并返回一个新镜头,它与原始镜头具有相同的光源类型和目标类型.

它看起来像这样(Ruby语法):

lens_a.get(source)
> {:title => "some title"}
lens_b.get(source)
> {:description => "some description"}
new_lens = unknown_function(lens_a, lens_b)
new_lens.get(source)
> {:title => "some title", :description => "some description"}
Run Code Online (Sandbox Code Playgroud)

我正在尝试构建的组合器的图表可以在本演示文稿的幻灯片18上看到(幻灯片的标题是"合并?").

我看过Haskell的镜头文档(我可以理解其中的一小部分),但我无法弄清楚这是哪个组合器.

上面的unknown_function的标准名称是什么?如果这个镜头没有标准名称,是否有一些标准功能可以组成它?如果没有,我可能只是称它为合并.

ruby haskell lenses

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

标签 统计

clojure ×2

clojurescript ×2

haskell ×2

edn ×1

lenses ×1

math ×1

monads ×1

redis ×1

ruby ×1

types ×1