可以说我有一张桌子:
Column | Type | Notes
---------+------------ +----------------------------------------------------------
id | integer | An ID that's FK to some other table
seq | integer | Each ID gets its own seq number
data | text | Just some text, totally irrelevant.
Run Code Online (Sandbox Code Playgroud)
id+ seq是组合键.
我想看到的是:
ID | SEQ | DATA
----+------ +----------------------------------------------
1 | 1 | Quick brown fox, lorem ipsum, lazy dog, etc etc.
1 | 2 | Quick brown fox, lorem ipsum, lazy dog, etc etc.
1 | …Run Code Online (Sandbox Code Playgroud) 我正在使用EitherT monad变压器.将它与IO monad相结合,恐怕我会得到一个异常并且它不会被捕获.
事实上,例外只是通过:
import Control.Monad.Trans
import Control.Error
import System.Directory
main = runEitherT testEx >>= print
testEx :: EitherT String IO ()
testEx = lift $ removeFile "non existing filename"
Run Code Online (Sandbox Code Playgroud)
但是EitherT否则完全符合法案以向呼叫者传达错误.所以我想使用它,而不是抛出异常......
我try从Control.Exception 看了一下:
try :: Exception e => IO a -> IO (Either e a)
Run Code Online (Sandbox Code Playgroud)
它看起来正是我想要的,它将适合我的EitherT IO堆栈...(可能有一个添加hoistEither,也许fmapL它开始看起来很冗长)但是一个天真的lift $ try不是类型检查.
我确信这个问题已经解决了好几千次,但我找不到任何描述这个问题的好链接.这应该如何解决?
编辑通过"这应该如何解决",我对惯用解决方案感兴趣,在haskell中处理它的标准方法是什么.从目前为止的答案来看,似乎惯用的方法是抛出异常并将其处理得更高.看起来有点反直觉,有两个控制和返回路径流,但它显然是它的意图.
我有一个糟糕的时间试图找出哪个是支持在java8 JRE上运行的Hibernate的最低版本,其中用户代码将使用java8功能.
我发现了这个错误,但它讨论了在hibernate中使用java8功能,它计划用于hibernate 5.2并且肯定hibernate 4.3.1已经支持java8,因为Wildfly发布它并声称完全支持java8.
我试图在hibernate bug跟踪器中找到与java8相关的bug,但是所有这些都是"太新了".
最后,我在Hibernate发行版中搜索了.0版本,并且再次没有成功:发布说明似乎只描述了自上一次RC或beta发布以来的更改......我试着跟踪4.3版本的所有RC和beta版本.0.Final和4.2.0.Final但未能找到这样的提及.
我们目前正在使用Hibernate 4.2.12.Final,我想知道我们是否可以开始使用java8或者我们是否需要升级到更新版本的hibernate(大概是4.3.x).
对于某些上下文,我们使用TomEE作为应用程序服务器.1.7.0刚刚发布,支持java8.但是,如果我们必须升级到hibernate 4.3.x,我有点担心我们不能将Hibernate 4.3.x与TomEE一起使用,因为我已经看到了这个:"但是,Hibernate 4.3+(JPA 2.1)不是由TomEE支持,因为它是Java EE 7." .所以如果可能的话,我们宁愿坚持4.2.xa.
编辑:我发现这个,有人说"我们使用hibernate(和4.3.x支持java 8)".所以可能需要4.3.x.
事实上,我很确定我使用的是错误的术语.这是我想要解决的问题:markdown格式的解析器,以及它的子集.
我的问题是blockquote功能.blockquote中的每一行都以>; 否则一切都是降价文件中的正常结构.
您不能单独查看单独的行,因为您需要将段落与法线分开,例如
> a
> b
Run Code Online (Sandbox Code Playgroud)
是不一样的
> a
>
> b
Run Code Online (Sandbox Code Playgroud)
和类似的东西(如果列表是块引用,你不需要x列表,但是一个列表包含x个元素).一种自然而琐碎的方法是"取消" >符号,自己解析块引用,忽略它周围的任何东西,用BlockQuote类型构造函数包装它,将它放在外部AST中并继续解析原始输入.pango如果我没错,那就是这样:
blockQuote :: MarkdownParser (F Blocks)
blockQuote = do
raw <- emailBlockQuote
-- parse the extracted block, which may contain various block elements:
contents <- parseFromString parseBlocks $ (intercalate "\n" raw) ++ "\n\n"
return $ B.blockQuote <$> contents
Run Code Online (Sandbox Code Playgroud)
然后:
http://hackage.haskell.org/package/pandoc-1.5.1/docs/src/Text-Pandoc-Shared.html#parseFromString
-- | Parse contents of 'str' using 'parser' and return result.
parseFromString :: GenParser tok …Run Code Online (Sandbox Code Playgroud) 这实际上是对打字稿2.8的后续排除:可以增加"分区"类型吗? - 我在代码中引入条件类型时遇到问题.
请注意,条件类型是typescript 2.8的新类型,因此目前必须使用typescript 2.8rc构建.
我将当前的问题减少到这个非常小的测试用例:
export class Option<T> {
toVector(): Vector<T> {
return <any>undefined;
}
}
interface Seq<T> {
tail(): Option<Seq<T>>;
}
class Vector<T> implements Seq<T> {
tail(): Option<Vector<T>> {
return <any>undefined;
}
// the next line breaks the compilation
partition2<U extends T>(predicate:(v:T)=>v is U): [Vector<U>,Vector<Exclude<T,U>>];
partition2(predicate:(x:T)=>boolean): [Vector<T>,Vector<T>];
partition2<U extends T>(predicate:(v:T)=>boolean): [Vector<U>,Vector<any>] {
return <any>undefined;
}
}
Run Code Online (Sandbox Code Playgroud)
新线是第一次重载partition2.如果你评论它,所有构建都很好.
如果你用--strict它编译它,它失败了一个相当令人困惑的构建错误:
t.ts(13,5): error TS2416: Property 'tail' in type 'Vector<T>' is not assignable to …Run Code Online (Sandbox Code Playgroud) 我有一个编码和工作的模块,但是我无法为它输入两个函数签名,因为要输入它们我必须启用TypeFamilies模块的扩展,当我这样做时,它不再构建.
对于其中一个我需要TypeFamilies因为它使用persisent/esqueleto函数.
我认为合适的类型是:
getByIds :: (PersistEntityBackend a ~ SqlBackend) =>
EntityField a (Key a) -> [Key a] -> SqlPersistM [Entity a]
Run Code Online (Sandbox Code Playgroud)
(ghc建议更通用的签名)
另一个使用hsqml.
ghc建议这个签名,但我想它可以简化:
prop :: forall tr b.
(Marshal tr, Typeable b, MarshalMode tr ICanReturnTo () ~ Yes) =>
String -> (b -> tr) -> Member (GetObjType (ObjRef b))
Run Code Online (Sandbox Code Playgroud)
底线是,没有TypeFamilies我不能写那些签名.TypeFamilies然而,在我启用的那一刻,代码将无法构建,我不明白为什么.错误看起来像一些多态函数突然变成单态.
错误输出相对较长,你可以在这里找到它.
我已经TypeFamilies在应用程序的其他几个模块中启用了没有问题,这使我能够使用SqlBackend&ICanReturnTo约束编写签名而没有问题.
该模块是否存在问题导致其无法构建TypeFamilies?或者我应该启用另一个扩展来修复它吗?我没想到只是启用该扩展来破坏编译.
我正在查看管道库的源代码,例如在Core模块中,我不明白为什么作者到处都是使用定义函数的模式:
runEffect = go
where
go p = ...
Run Code Online (Sandbox Code Playgroud)
要么:
pull = go
where
go a' = ...
Run Code Online (Sandbox Code Playgroud)
要么:
reflect = go
where
go p = ...
Run Code Online (Sandbox Code Playgroud)
这是一些启用某些优化的技巧吗?我发现它很难看,如果它是一些优化技巧我真的希望编译器可以在没有这样的情况下做到这一点.但也许还有另一个原因?
我想为一些racket 2htdp函数/宏添加别名,以便我可以为我的孩子用另一种语言翻译它们.
作为功能的东西我可以简单地用别名define.我的big-bang结构有问题; 如果我尝试别名on-tick,例如,每次我得到big-bang: [new-name] clauses are not allowed within big-bang.
我尝试了各种各样的变种,define-syntax但到目前为止我无法使它工作(说,我是一个完整的球拍新手).
像这样的东西有效(好吧,ladja没有定义):
#lang racket
(require 2htdp/universe 2htdp/image)
(big-bang 0
(on-tick (lambda (x) (+ x 1)))
(to-draw (lambda (x) (place-image ladja 150 x (prazni-prostor 300 300))))
(stop-when (lambda (x) (= x 300))))
Run Code Online (Sandbox Code Playgroud)
但这不会(触发错误):
#lang racket
(require 2htdp/universe 2htdp/image)
(define new-name on-tick)
(big-bang 0
(new-name (lambda (x) (+ x 1)))
(to-draw (lambda (x) (place-image ladja 150 x …Run Code Online (Sandbox Code Playgroud) 我正在查看 facebook 的不可变库及其打字稿绑定。
如果我有这个代码:
const list: User[] = ...;
list.map(user => ...)
Run Code Online (Sandbox Code Playgroud)
lambda 参数的类型user正确User。
但是,如果我导入不可变的List并包装我的数组:
import {Map, List} from "immutable";
List(list).map(user => ...)
Run Code Online (Sandbox Code Playgroud)
现在,让我感到困惑的是,lambda 参数user被推断为User | undefined。即使将呼叫更改为也List<User>(list)无济于事。
查看库的 .d.ts,定义是:
export function List<T>(array: Array<T>): List<T>;
Run Code Online (Sandbox Code Playgroud)
所以我不明白这是怎么回事?
在这个例子中:
let x: string|null = null;
["test"].forEach(si => {
x = si;
})
x
Run Code Online (Sandbox Code Playgroud)
typescriptx在代码末尾推断其类型为null。我不明白为什么它从最初开始就缩小了类型string|null?
如果我在节点中运行此代码:
let x: string|null = null;
["test"].forEach(si => {
x = si;
})
x
Run Code Online (Sandbox Code Playgroud)
输出是test,因此类型null似乎不正确?
它似乎与 lambda 有关,因为for..of正确使用 for 循环会给出最终类型string|null. 我猜打字稿无法检查闭包中发生了什么?但如果它不知道,为什么要缩小类型而不是保留原来的类型呢string|null?
haskell ×4
typescript ×3
ghc ×2
attoparsec ×1
generics ×1
hibernate ×1
immutable.js ×1
java ×1
java-8 ×1
postgresql ×1
racket ×1
scheme ×1
sql ×1
tomee ×1