小编The*_*au5的帖子

Divisible Type类是否有用?

我最近一直在研究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?我应该注意哪些问题?

非常感谢您的帮助.

haskell types type-theory functional-programming elm

30
推荐指数
3
解决办法
1250
查看次数

如何在榆树中建立图书馆?

我正在整理一些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)

这让我可以访问每个文件中的所有内容.

可能吗?如果是这样,最好的策略是什么?

elm

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

查找地图是否包含多个键

我是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?功能?

clojure clojurescript

6
推荐指数
2
解决办法
4718
查看次数

用于交换函数参数的函数类型

所以我让这些函数交换函数的参数

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)

haskell types functional-programming

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

如何解析 pegjs 中的嵌套注释?

我想知道您如何在 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 表达式,很容易: …

javascript grammar parsing peg pegjs

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

您如何观察聚合物中元素的宽度?

我想知道如何观察元素的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通常可以从外部访问的属性。

javascript css dom polymer

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

在python中将简单命令转换为AST

我想在Python中使用一个函数将字符串命令转换为AST(抽象语法树).

该命令的语法如下:

commandName(3, "hello", 5.0, x::int)
Run Code Online (Sandbox Code Playgroud)

命令可以接受任意数量的逗号分隔值

  1. 整型
  2. 字符串
  3. 花车
  4. 类型

假设函数被调用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)

python parsing abstract-syntax-tree pyparsing

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