标签: vinyl

乙烯基:组成记录类别别名

在Vinyl中,我可以为记录定义类型别名,以便更容易导出到其他模块:

import Data.Vinyl

name = Field :: "name" ::: String
age = Field :: "age" ::: Int
type Person = ["name" ::: String, "age" ::: Int]
Run Code Online (Sandbox Code Playgroud)

现在假设我添加另一个存储高度的字段.

height = Field :: "height" ::: Int
Run Code Online (Sandbox Code Playgroud)

我想很好地为包含Person和的记录构造一个类型别名height.天真,这可能看起来像这样:

type MeasuredPerson = ("height" ::: Int) : Person
Run Code Online (Sandbox Code Playgroud)

显然,这种语法不起作用!有没有办法做到这一点?是否有任何好的参考资料来解释这里似乎使用的类型级数组语法?

haskell type-level-computation vinyl

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

通过蕴涵削弱乙烯基的RecAll约束

乙烯基库中,有一个RecAll类型族,让我们要求对类型级别列表中的每个类型使用部分应用的约束.例如,我们可以这样写:

myShowFunc :: RecAll f rs Show => Rec f rs -> String
Run Code Online (Sandbox Code Playgroud)

这一切都很可爱.现在,如果我们的约束RecAll f rs c在哪里c是未知的,并且我们知道c x需要d x(借用ekmett的contstraints包中的语言),我们怎么能得到RecAll f rs d

我问的原因是我正在处理一些需要满足几个类型类约束的函数中的记录.要,我现在用的是做这个:&:组合子从Control.Constraints.Combine模块中存在的包.(注意:如果安装了其他东西,则不会构建软件包,因为它依赖于超级旧版本contravariant.您可以复制我提到的一个模块.)有了这个,我可以得到一些非常漂亮的约束,同时最小化类型类肉鸡.例如:

RecAll f rs (TypeableKey :&: FromJSON :&: TypeableVal) => Rec f rs -> Value
Run Code Online (Sandbox Code Playgroud)

但是,在这个函数的主体内部,我调用另一个需要较弱约束的函数.它可能看起来像这样:

RecAll f rs (TypeableKey :&: TypeableVal) => Rec f rs -> Value
Run Code Online (Sandbox Code Playgroud)

GHC无法看到第二个声明来自第一个声明.我认为情况就是这样.我看不到的是如何证明它以实现它并帮助GHC.到目前为止,我有这个:

import Data.Constraint

weakenAnd1 :: ((a …
Run Code Online (Sandbox Code Playgroud)

haskell constraints ghc vinyl

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

Haskell:在编译时引用值的类型

我想知道是否有一种很好的方式来引用值的类型而没有type在代码中使用显式别名(不是在运行时 - 这里没有进行任何验证).

请使用以下代码(使用Data.Vinyl):

{-# LANGUAGE DataKinds, TypeOperators #-}

import Data.Vinyl

name = Field :: "name" ::: String
age = Field :: "age" ::: Int
type Person = ["name" ::: String, "age" ::: Int]
Run Code Online (Sandbox Code Playgroud)

这里我们有两种类型,"name" ::: String"age" ::: Int在两个地方重复.如果我们在多个记录中重用字段,这可能会变成多个位置.尽管Person类型实际上是组成字段,但类型声明是独立的.因此,age改为代表Float,需要在各个地方进行改变.

显然,没有必要明确地输入内容,因为它们将被推断出来.但是,在我的情况下,记录类型是从选项解析器返回的,因此导出.同样,可以编写以下内容:

type Name = "name" ::: String
name = Field :: Name
type Age = "age" ::: Int
age = Field :: Age
type Person …
Run Code Online (Sandbox Code Playgroud)

haskell types vinyl

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

如何使用对象列表作为gulp源流

我知道gulp需要一个乙烯基源流才能正常工作,但是有一种简单的方法可以使用已经存在的乙烯基文件或json对象而不是众所周知的仅采用globs的gulp.src吗?

javascript node.js gulp vinyl node-streams

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

Gulpvinyl ftp - 删除本地删除的文件

我使用乙烯基 ftp 在远程服务器上部署我的项目。上传文件没问题,但我还想删除本地文件夹中不再存在的文件。

例子 :

本地文件夹

./
fileA
fileB
fileC
Run Code Online (Sandbox Code Playgroud)

远程文件夹:

./
fileB
fileC
fileD
Run Code Online (Sandbox Code Playgroud)

部署后我在远程文件夹中的内容:

./
fileA
fileB
fileC
fileD
Run Code Online (Sandbox Code Playgroud)

我想要什么(与本地文件夹完全相同):

./
fileA
fileB
fileC
Run Code Online (Sandbox Code Playgroud)

我可以使用 rmdir 删除所有文件,但这意味着为每个部署重新上传所有文件。

谢谢

ftp gulp vinyl

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

Gulp vinyl ftp - 如何使用清洁功能?

vinyl-ftp软件包有一个功能,clean()但我不知道如何正确使用它.我需要:

  1. 从我的build文件夹中获取所有文件
  2. 把它们放到我的ftp服务器上的目标文件夹中
  3. 清除文件,如果它们在本地不可用

我有以下gulp任务:

gulp.task('deploy', () => {
  let conn = ftp.create({host:host,user:user,password: password});
  return gulp.src('build/**', {base: './build/', buffer: false })
      .pipe(conn.newer('/path/on/my/server/')) // only upload newer files
      .pipe(conn.dest('/path/on/my/server/'))
      .pipe(conn.clean('build/**', './build/'));
});
Run Code Online (Sandbox Code Playgroud)

1)和2)是可以的,但clean()功能什么都不做

ftp node.js gulp vinyl vinyl-ftp

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

乙烯基:具有需要所有字段共享约束的函数的rtraverse

我构建了一个黑胶唱片的简单例子.首先,一些语言编译指示和导入:

{-# LANGUAGE DataKinds, TypeOperators #-}

import Data.Vinyl
import Data.Vinyl.Functor
import Control.Applicative
Run Code Online (Sandbox Code Playgroud)

实际示例(为简单起见,它使用HList类型同义词):

mytuple :: HList [Integer,Bool]
mytuple = Identity 4 :& Identity True :& RNil
Run Code Online (Sandbox Code Playgroud)

编译好了.但现在我想使用rtraverse打印黑胶唱片:

printi :: Show a => Identity a -> IO (Identity a)
printi (Identity x) = print x *> pure (Identity x)

main :: IO ()
main = rtraverse printi mytuple *> pure ()
Run Code Online (Sandbox Code Playgroud)

这会出现以下错误:No instance for (Show x) arising from a use of ‘printi’.我想这是预期的,因为rtraverse …

haskell vinyl

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

剪辑路径插入圆

我有一个方形图像,想将其切成圆形以查看后面的内容(实际上是身体背景图像)。我找到了clip-pathCSS 属性,但我只是用图像创建一个圆圈,而不是创建一个被我的图像包围的圆圈。

到目前为止,我有一个白色背景,所以我只是创建了一个::after白色元素,带有嵌入的框阴影,但现在我得到了背景图像,所以我无法保留它。

有没有一种带或不带剪辑路径的方法来实现这一目标?

PS:最终的目标是制作一个旋转的音乐黑胶唱片,所以这个中间的孔是必要的!:)

谢谢。

css geometry vinyl clip-path

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