小编Pau*_*-AG的帖子

如何在模式匹配中标记无法访问的案例

在模式匹配表达式中"标记"无法访问的案例的标准方法是什么?例如,对于Aeson,我有Value并需要解压缩它.我用模式匹配来做,我知道它是Object,它不是Array,String,Number等,因为我创建了它.所以,我会有案例_ -> something.一定是something什么?我的意思是标准的Haskell,而不是LiquidHaskell方法:)它是类似的error "Internal error"还是别的?

haskell

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

镜头清单

在中有/ / etc的at镜头。但是,有没有类似于关联列表类型(可转换为地图)的镜头?MapHashMapControl.Lens.Atat[(k, v)]

haskell haskell-lens

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

为什么在Liquid Haskell中Nat类型等于Int?

为什么这会通过Liquid Haskell验证?

{-@ sub :: Nat -> Nat -> Int @-}                                                                                                         
sub :: Int -> Int -> Int 
sub i j = i - j 
Run Code Online (Sandbox Code Playgroud)

从LH的角度来看,这是否意味着Nat相同Int

haskell liquid-haskell

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

“!” 是什么意思?(爆炸符号)在属性声明中意味着什么?

代码:

class Cat extends Animal { tag! : 'cat' }
Run Code Online (Sandbox Code Playgroud)

“!” 是什么意思?声明后的意思tag?它与只是有什么不同tag

typescript

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

错误:自定义域中不存在运算符

我的 Postgres 12 数据库架构中有声明:

CREATE TYPE something_e AS ENUM('OPEN', 'CLOSE');
CREATE DOMAIN something_t AS something_e NOT NULL DEFAULT 'OPEN';
CREATE TABLE xxx (
...
something something_t,
...
);
Run Code Online (Sandbox Code Playgroud)

看来 INSERT 工作得很好。但 select - 不会:

INSERT INTO yyy (...) VALUES (..., (SELECT ID FROM xxx WHERE ... AND something='OPEN'));
Run Code Online (Sandbox Code Playgroud)

这里我得到一个错误:

“错误:运算符不存在:something_t = 未知”。

我尝试将类型转换为something_e, tosomething_t::没有成功。我什至收到类似“操作符不存在:something_t = Something_t”之类的错误!我最初的想法是减少代码的重复,因此something_t基于 enum 引入这个新域something_e,但是现在如何使用这样的标准进行选择?INSERT 似乎something_t自动将“OPEN”字符串转换为...这种情况的正确语法是什么?

sql postgresql where-clause sql-insert

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

如何理解 Pharo Smalltalk 中的这种语法结构?

这个语法{ ...: ...}是什么意思?示例

Class {
    #name : #TypExamples,
    #superclass : #Object,
    #category : #'Typer-Core-Examples-OLD'
}

{ #category : #accessing }
TypExamples >> recursion [
    | x |
    x := [ x ].
    ^ x
]
Run Code Online (Sandbox Code Playgroud)

是字典吗?我在 Pharo Cheat Sheet 中没有找到这样的语法。Playground 和方法体是否合法?

smalltalk pharo

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

重叠实例错误的原因是什么?

此示例中出现“ToJSON [XYZ] 的重叠实例”错误的原因是什么:

data XYZ = XYZ Int
instance ToJSON [XYZ] where
  toJSON xs = ...
Run Code Online (Sandbox Code Playgroud)

GHC 显示为重叠实例:

instance ToJSON a => ToJSON [a] ...
Run Code Online (Sandbox Code Playgroud)

这不是一个合适的情况:还XYZ没有ToJSON实例。我可以用 修复它,{-# OVERLAPS #-}但我不明白为什么 GHC 不明白[a]wherea不需要ToJSON的显式定义ToJSON。我想念什么?

haskell

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

模块导出列表:如何导出导入的模块?

我可以像这样重新导出导入的模块:

module My (
  module Another
, A
) where
import Another
Run Code Online (Sandbox Code Playgroud)

但是此表格只会导出AnotherA。如何在不枚举所有导出符号的情况下导出所有内容(全部!)和导入的模块?像没有列表的导出之类的东西:

module My where
...
Run Code Online (Sandbox Code Playgroud)

PS。最后一种形式不重新导​​出导入模块。有可能吗?

haskell

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

带镜头的增量后缀

如何编写一个基于镜头的函数,增加数字后缀(如果存在)并在没有这样的后缀时保持字符串不变?

"aaa1" -> "aaa2"
"aaa_123" -> "aaa_124"
"" -> ""
"aaa" -> "aaa"
"123a" -> "123a"
"3a5" -> "3a6"
Run Code Online (Sandbox Code Playgroud)

我觉得我可能首先需要一些棱镜,但不知道是哪一个(suffixed没有函数作为参数,而是标量)。

haskell haskell-lens

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

我可以通过这种方式使用 IORef 作为一种“互斥体”吗?

我有一个必须以互斥方式执行的操作。在其他语言中,我可以做类似的事情(类似Python的伪代码):

with myLock:
  # here lock is acquired
  do mutual exclusive operation
# here lock is released
Run Code Online (Sandbox Code Playgroud)

当然,我可以在 Haskell 中使用MVar: 拿走它然后把它放回去。但我想这样做IORef

with myLock:
  # here lock is acquired
  do mutual exclusive operation
# here lock is released
Run Code Online (Sandbox Code Playgroud)

它看起来像其他语言中典型的“原子”或“同步”标志。但我不确定它在 Haskell 中的安全性以及如何实现IORef这样的目标。再说一遍,我的想法是用IORef. 真的安全吗(操作真的会互斥)吗?

haskell

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