在模式匹配表达式中"标记"无法访问的案例的标准方法是什么?例如,对于Aeson,我有Value并需要解压缩它.我用模式匹配来做,我知道它是Object,它不是Array,String,Number等,因为我创建了它.所以,我会有案例_ -> something.一定是something什么?我的意思是标准的Haskell,而不是LiquidHaskell方法:)它是类似的error "Internal error"还是别的?
在中有/ / etc的at镜头。但是,有没有类似于关联列表类型(可转换为地图)的镜头?MapHashMapControl.Lens.Atat[(k, v)]
为什么这会通过Liquid Haskell验证?
{-@ sub :: Nat -> Nat -> Int @-}
sub :: Int -> Int -> Int
sub i j = i - j
Run Code Online (Sandbox Code Playgroud)
从LH的角度来看,这是否意味着Nat相同Int?
代码:
class Cat extends Animal { tag! : 'cat' }
Run Code Online (Sandbox Code Playgroud)
“!” 是什么意思?声明后的意思tag?它与只是有什么不同tag?
我的 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”字符串转换为...这种情况的正确语法是什么?
这个语法{ ...: ...}是什么意思?示例:
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 和方法体是否合法?
此示例中出现“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。我想念什么?
我可以像这样重新导出导入的模块:
module My (
module Another
, A
) where
import Another
Run Code Online (Sandbox Code Playgroud)
但是此表格只会导出Another和A。如何在不枚举所有导出符号的情况下导出所有内容(全部!)和导入的模块?像没有列表的导出之类的东西:
module My where
...
Run Code Online (Sandbox Code Playgroud)
PS。最后一种形式不重新导出导入模块。有可能吗?
如何编写一个基于镜头的函数,增加数字后缀(如果存在)并在没有这样的后缀时保持字符串不变?
"aaa1" -> "aaa2"
"aaa_123" -> "aaa_124"
"" -> ""
"aaa" -> "aaa"
"123a" -> "123a"
"3a5" -> "3a6"
Run Code Online (Sandbox Code Playgroud)
我觉得我可能首先需要一些棱镜,但不知道是哪一个(suffixed没有函数作为参数,而是标量)。
我有一个必须以互斥方式执行的操作。在其他语言中,我可以做类似的事情(类似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 ×7
haskell-lens ×2
pharo ×1
postgresql ×1
smalltalk ×1
sql ×1
sql-insert ×1
typescript ×1
where-clause ×1