对不起我的英语。
我正在为Rust开发一个Haskell的Parsec库版本。当我尝试为parsec定义类型别名时,比如Swift中的define:
struct Parsec<T, S:CollectionType> {
typealias Parser = (BasicState<S>)->Result<T, SimpleError<S.Index>>
}
我想写:
pub type Result<T> = result::Result<Arc<T>, SimpleError>;
pub type Parsec<T, R, S> where S:State<T> = Box<FnMut(&mut S)->Result<R>>;
但它有编译错误:
编译raskell v0.1.0(file:/// Users / march / jobs / raskell) src / parsec / atom.rs:7:45:7:74错误: 类型参数
T
未使用[E0091] src / parsec / atom.rs:7 pub类型Parsec其中S:State = BoxResult&gt ;;
但是如果我忽略它,那么类型派生会遇到一些困难。就像State<T>
的一些参数一样,应该是泛型类型,但编译器在编译时不能知道类型。
有一个完整的Swift 2.0 edition,但单元测试尚未完成。有一个golang edition有更多的单元测试和一个lisp like sample project。也许这些项目可以帮助我展示这个想法和我的问题。
无法构建Rust edition that I am writing。如果您尝试cargo build
,则会看到一些错误。