在我读完"了解你的Haskell以获得伟大的好处!" 中的RPN计算器示例之后.我想以更一般的方式自己重写它.
为了方便地扩展可用的功能,我将它们放在单独的列表中,并lookup使用ViewPatterns语法将模式与函数匹配.为了阅读输入read我写了这个:
parse xs x = case readMaybe x of
Just x -> Right (x : xs)
Nothing -> Left "Syntax error
Run Code Online (Sandbox Code Playgroud)
但我宁愿避免使用case表达式并再次使用这样的视图模式:
parse xs (readMaybe -> Just x ) = Right (x : xs)
parse xs (readMaybe -> Nothing) = Left "Syntax error"
Run Code Online (Sandbox Code Playgroud)
但是后者我得到了这个错误:
No instance for (Read a0) arising from a use of ‘readMaybe’
我不明白为什么.它们不相同吗?
整个代码在这里.
我正在学习依赖类型:在Haskell中我定义了规范类型
data Vec ? Type ? Nat ? Type where
Nil ? Vec a Z
(:-) ? a ? Vec a n ? Vec a (S n)
Run Code Online (Sandbox Code Playgroud)
并且实现了大部分功能,Data.List但是我不知道怎么写,如果可能的话,功能就像
delete ? Eq a ? a ? Vec a n ? Vec a (??)
Run Code Online (Sandbox Code Playgroud)
因为结果的长度是未知的.我在Agda中找到了它并且以这种方式实现了它
delete : {A : Set}{n : Nat}(x : A)(xs : Vec A (suc n)) ? x ? xs ? Vec A n
delete .x (x ? xs) hd = xs
delete {A}{zero } _ ._ …Run Code Online (Sandbox Code Playgroud) 我制作了一个打印 unicode 特殊字符(即上标、下标...)的小应用程序。当它在本地运行时没有问题,但是当它在 ssh 会话中运行时,我总是收到 UnicodeEncodeError。具体来说:UnicodeEncodeError 'ascii' can't encode characters in position 0-1: ordinal not in range(128)
我尝试了不同的 ssh 客户端、计算机并仔细检查了会话编码,但结果是一样的。这真的很奇怪。为什么会发生这种情况?这真的与ssh有关吗?
由于相互依赖的导入,我不得不在Instances模块中移动类实例,在模块中移动我的数据类型Types.然后,两个模块的定义由包的主模块重新导出.
Haddock为我的类型列出派生的类实例,deriving但缺少所有其他实例(尽管它们似乎正确导出并正常工作).这是正常还是应该列出?我能做什么?
如果需要,这是包.
谢谢.
我tempfile.NamedTemporaryFile()用来存储一些文本,直到程序结束。在Unix上可以正常使用,但是在Windows上无法读取或写入返回的文件:python提供Errno13。唯一的方法是使用设置delete=False和手动删除文件os.remove()。为什么?