我最近一直在研究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)