我最近一直在研究Elm中的一个API,其中一个主要类型是逆变.所以,我已经用Google搜索了解逆变类型可以做什么,并发现Haskell中的Contravariant包定义了Divisible类类.
它的定义如下:
class Contravariant f => Divisible f where
divide :: (a -> (b, c)) -> f b -> f c -> f a
conquer :: f a
Run Code Online (Sandbox Code Playgroud)
事实证明,我的特定类型适合Divisible类型的定义.虽然Elm不支持类型类,但我会不时地查看Haskell以获得一些灵感.
我的问题:这种类型有任何实际用途吗?Haskell(或其他语言)中是否存在受益于这种分治模式的已知API?我应该注意哪些问题?
非常感谢您的帮助.
我正在整理一些Elm代码,我想知道如何执行以下操作:
假设我有以下文件结构
Project
|
|---Car
|
|--- BMW.elm
|
|--- Mercedes.elm
|...
Run Code Online (Sandbox Code Playgroud)
假设我已将BMW和梅赛德斯代码分成不同的文件以保持我的代码小而且分离,所以我更容易添加另一个文件,比如说 Toyota.elm
现在,我希望Project文件夹中的任何文件只需访问文件Car
夹中的所有文件而无需编写
import Car.BMW (..)
import Car.Mercedes (..)
...etc...
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想写一些类似的东西
import Car (..)
Run Code Online (Sandbox Code Playgroud)
这让我可以访问每个文件中的所有内容.
可能吗?如果是这样,最好的策略是什么?
我是Clojure的新手,我想知道是否有办法测试地图是否有多个键.我注意到contains?
只检查一个键
我想做什么:
(def mario
{:position {:x 1 :y 2}
:velocity {:x 2 :y 0}
:mass 20})
;;Test if mario has a position and a velocity
(contains-many? mario :position :velocity) ;;true
;;Test if mario has a mass and a jump-height
(contains-many? mario :mass :jump-height) ;;false
Run Code Online (Sandbox Code Playgroud)
基本上,是否有像contains-many?
clojure库中的函数,如果没有,你将如何实现该contains-many?
功能?
所以我让这些函数交换函数的参数
swap1_3 f x y z = f z y x
toFront3 f x y z = f z x y
Run Code Online (Sandbox Code Playgroud)
这些功能的工作原理如下
foo x y z = [x,y,z]
a = foo 1 2 3 -- returns [1,2,3]
b = swap1_3 foo 1 2 3 -- returns [3,2,1]
c = toFront3 foo 1 2 3 -- returns [3,1,2]
Run Code Online (Sandbox Code Playgroud)
现在,我不明白的是这些函数的类型签名.
类型签名如下
swap1_3 :: (a -> b -> c -> d) -> c -> b -> a -> d
toFront3 :: (a -> …
Run Code Online (Sandbox Code Playgroud) 我想知道您如何在 pegjs 中解析注释(例如,la Haskell)。
目标:
{-
This is a comment and should parse.
Comments start with {- and end with -}.
If you've noticed, I still included {- and -} in the comment.
This means that comments should also nest
{- even {- to -} arbitrary -} levels
But they should be balanced
-}
Run Code Online (Sandbox Code Playgroud)
例如,以下不应解析:
{- I am an unbalanced -} comment -}
Run Code Online (Sandbox Code Playgroud)
但是你也应该有一个转义机制:
{- I can escape comment \{- characters like this \-} -}
Run Code Online (Sandbox Code Playgroud)
这有点像解析 s 表达式,但使用 s 表达式,很容易: …
我想知道如何观察元素的CSS属性(例如宽度)的变化。
我尝试这样做,但是没有用。我哪里做错了?可能吗?
<polymer-element name="test-resize" attributes="elementWidth">
<template>
<p>elementWidth : {{elementWidth}}</p>
</template>
<script>
Polymer({
elementWidth: 100,
observe: {
"clientWidth" : "updateWidth",
},
updateWidth: function(oldValue, newValue){
this.elementWidth = newValue;
}
});
</script>
</polymer-element>
Run Code Online (Sandbox Code Playgroud)
在此示例中,我试图观察clientWidth
通常可以从外部访问的属性。
我想在Python中使用一个函数将字符串命令转换为AST(抽象语法树).
该命令的语法如下:
commandName(3, "hello", 5.0, x::int)
Run Code Online (Sandbox Code Playgroud)
命令可以接受任意数量的逗号分隔值
假设函数被调用convert_to_ast
,那么
convert_to_ast('commandName(3, "hello", 5.0, x::int)')
Run Code Online (Sandbox Code Playgroud)
应该产生以下AST:
{
'type': 'command',
'name': 'commandName',
'args': [{
'type': 'int',
'value': 3
}, {
'type': 'str',
'value': 'Hello'
}, {
'type': 'float',
'value': 5.0
}, {
'type': 'var',
'kind': 'int',
'name': 'x
}]
Run Code Online (Sandbox Code Playgroud)