Student name: Kyle Headley
- Project kind: IC library implementation
- Project details: Extend the rust implementation of the RAZ with additional incremental features.
| use std::fmt::Display; | |
| trait Monadic {} | |
| #[derive(Debug)] | |
| struct Monad<M:Monadic,T>(M,T); | |
| #[derive(Debug)] | |
| struct Opt(bool); | |
| impl Monadic for Opt {} | |
| impl<T:Default> Monad<Opt,T> { |
| #![allow(unused)] | |
| use std::fmt::Debug; | |
| #[derive(Debug)] | |
| struct Door<S: DoorState> { | |
| state: S, | |
| } | |
| trait DoorState {} |
| trait F<V,X> {} | |
| struct D; | |
| trait TheV2 { | |
| type IsThis; | |
| } | |
| impl<V1,V2> TheV2 for F<V1,V2> { | |
| type IsThis = V2; |
| // emulates the type of a function from types 'E' to sequence-like types | |
| pub trait SeqTypeFn<E> { type Result : SeqLike<E>; } | |
| // sequence-like interface | |
| pub trait SeqLike<E>{ | |
| fn new() -> Self; | |
| fn push(self,e:E) -> Self; | |
| fn first(&self) -> Option<&E>; | |
| } |
| #![allow(dead_code)] | |
| struct True; | |
| struct False; | |
| impl IsEqual<False> for True {type Out=False;} | |
| impl IsEqual<False> for False {type Out=True;} | |
| impl IsEqual<True> for True {type Out=True;} | |
| impl IsEqual<True> for False {type Out=False;} | |
| trait Nat {fn inst()->usize;} | |
| struct Zero; |
| #![allow(unused)] | |
| #![feature(non_ascii_idents)] | |
| // #![feature(conservative_impl_trait)] | |
| // basic nats, my knowledge | |
| mod nat { | |
| pub trait Nat { fn to_usize() -> usize; } | |
| pub struct Zero; | |
| impl Nat for Zero { fn to_usize() -> usize { 0 } } | |
| pub struct Succ<N>(pub N); |
| #![allow(unused)] | |
| //#![feature(optin_builtin_traits)] | |
| // Booleans | |
| struct True; | |
| struct False; | |
| trait BoolOr<B> {type BoolOr;} | |
| impl<B> BoolOr<B> for True {type BoolOr=True;} | |
| impl BoolOr<True> for False {type BoolOr=True;} | |
| impl BoolOr<False> for False {type BoolOr=False;} |
| /// Higher-order macro fold function for pre-parsing comma separated lists | |
| /// | |
| /// The commas on KEYWORD lines can be changed to parse lists with any | |
| /// separator. | |
| /// run a macro on a list of lists after splitting the input at commas | |
| macro_rules! split_comma { | |
| // no defaults | |
| {$fun:ident <= $($item:tt)*} => { | |
| split_comma![$fun () () () <= $($item)*] |
| #![allow(unused)] | |
| use std::error::Error; | |
| use std::io::prelude::*; | |
| use std::process::{Command, Stdio}; | |
| use std::str; | |
| fn main() { | |
| let process = match Command::new("z3") | |
| // use any z3 language with another .arg() here | |
| .arg("-in") |