1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
#![doc(html_playground_url = "https://play.rust-lang.org/")] //! Frunk: generic functional programming toolbelt for Rust //! //! Aims to be a collection of functional programming abstractions implemented in Rust //! in effective, useful, and idiomatic ways. Examples of things that are included in rust are: //! //! 1. HLists (heterogeneously-typed lists) //! 2. Validated (accumulator for Result) //! 3. Semigroup //! 4. Monoid //! //! Here is a small taste of what Frunk has to offer: //! //! ``` //! # #[macro_use] extern crate frunk; //! # #[macro_use] extern crate frunk_core; //! # use frunk_core::hlist::*; fn main() { //! use frunk_core::hlist::*; //! use frunk::monoid::*; //! use frunk::semigroup::*; //! use frunk::validated::*; //! //! // Combining Monoids //! let v = vec![Some(1), Some(3)]; //! assert_eq!(combine_all(&v), Some(4)); //! //! // HLists //! let h = hlist![1, "hi"]; //! assert_eq!(h.length(), 2); //! let hlist_pat!(a, b) = h; //! assert_eq!(a, 1); //! assert_eq!(b, "hi"); //! //! let h1 = hlist![Some(1), 3.3, 53i64, "hello".to_owned()]; //! let h2 = hlist![Some(2), 1.2, 1i64, " world".to_owned()]; //! let h3 = hlist![Some(3), 4.5, 54, "hello world".to_owned()]; //! assert_eq!(h1.combine(&h2), h3) //! # } //! ``` //! //! Links: //! 1. [Source on Github](https://github.com/lloydmeta/frunk) //! 2. [Crates.io page](https://crates.io/crates/frunk) #[macro_use] extern crate frunk_core; #[macro_use] extern crate frunk_derives; pub mod semigroup; pub mod monoid; pub mod validated; pub use frunk_core::hlist::*; // this needs to be globally imported in order for custom derives to work w/o fuss pub use frunk_core::generic::*; pub use frunk_derives::*;