我正试图将几个项目转换成classy-prelude目前.虽然大多数行为对我来说都很简单,但(head . head)在简单的2D列表中给出了神秘的错误.
考虑以下GHCi会话:
Prelude> (head . head) [[1,2],[3,4]]
1
Run Code Online (Sandbox Code Playgroud)
让我们试试这个用ghci -XNoImplicitPrelude和classy-prelude:
> import ClassyPrelude
ClassyPrelude> (head . head) [[1,2],[3,4]]
<interactive>:10:1:
Couldn't match type `MinLen (Succ nat1) mono1' with `[[t0]]'
Expected type: [[t0]] -> Element mono0
Actual type: MinLen (Succ nat1) mono1 -> Element mono0
The function `head . head' is applied to one argument,
but its type `MinLen (Succ nat1) mono1 -> Element mono0'
has only one
In the expression: (head …Run Code Online (Sandbox Code Playgroud) 我使用严格的预定义映射将不同类型的文档存储在单个索引中.所有这些都有一些字段(比如"body"),但我希望在索引时对它们进行略微不同的分析(例如,对特定文档使用不同的标记过滤器),并在搜索时以相同的方式进行处理.据我所知,每个文档都无法指定分析器.
我还考虑使用的内容:
{"mail":"smth"}使用特定索引分析器保存对象,然后搜索"query":{"body":"smth"}使用通用搜索分析器)._all,然后将其设置copy_to为单个body字段.我不确定,但由于复制,它会增加大量的索引开销.对于学习依赖类型,我正在重写伊德里斯的旧Haskell游戏.目前游戏"引擎"使用内置整数类型,例如Word8.我想证明一些涉及这些数字的数值属性的引理(例如,双重否定是同一性).但是,不可能对原始算术运算的行为说些什么.会是什么更好的,只使用believe_me或其他handwaving(至少在最基本的属性),或者重写使用我的代码Nat,Fin和其他"高层"数值类型?
所以>>= :: m a -> (a -> m b) -> m b和>> :: m a -> m b -> m b.
而<* :: f a -> f b -> f a.
但我想要做的事情m a -> (a -> m b) -> m a,即实际上丢弃计算结果并保留原始.在我的例子中,这个计算结果只是一个返回的IO操作,()所以我只需要传递原始值.
有这样的功能吗?如果没有,我该如何撰写?没想成功.谢谢!