Sign in

    lazy

    a lazy library support recursion

    lazy
    lazy recursion
    Download zip
    Version
    0.1.3
    License
    Apache-2.0
    Last updated
    last year
    Downloads
    48

    #illusory0x0/lazy

    a lazy library support recursion

    #Example

    #component

    #extensible parser

    Haskell implementation MarisaKirisame/extensible-parser

    Haskell2010 implementation illusory0x0/extensible-parser

    Moonbit implementation illusory0x0/extensible-parser.mbt

    #even/odd

    Haskell implementation gist

    #Recommaned Reading

    #lazylist/fibs

    Haskell implementation fibs

    lazy is not recommaned used for this example, lazy is call by need is suitable for some lazy values won't actually be used

    GHC is implemented by Graph Reduction, G-machine never Stack Overflow, Moonbit hasn't this runtime support, So implement fibs use zipWith efficiently is impossible.

    fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

    Lazy

    type Lazy[A]

    impl Show for Lazy[A]

    Lazy::bind

    fn[A, B] Lazy::bind(self : Lazy[A], f : (A) -> Lazy[B]) -> Lazy[B]

    Lazy::fix

    fn[A] Lazy::fix(f : (Lazy[A]) -> Lazy[A]) -> Lazy[A]

    Lazy::force

    fn[A] Lazy::force(self : Lazy[A]) -> A

    Lazy::join

    fn[A] Lazy::join(self : Lazy[Lazy[A]]) -> Lazy[A]

    Lazy::map

    fn[A, B] Lazy::map(self : Lazy[A], f : (A) -> B) -> Lazy[B]

    Lazy::new

    fn[A] Lazy::new(fun : () -> A) -> Lazy[A]

    LazyBuilder

    type LazyBuilder[A]

    LazyBuilder::inherit_

    fn[A, B] LazyBuilder::inherit_(self : LazyBuilder[A], f : (A) -> B, g : (B) -> A) -> LazyBuilder[B]

    LazyBuilder::map

    fn[A] LazyBuilder::map(self : LazyBuilder[A], f : (A) -> A) -> LazyBuilder[A]

    LazyBuilder::new

    fn[A] LazyBuilder::new(f : (Lazy[A]) -> A) -> LazyBuilder[A]

    LazyBuilder::run

    fn[A] LazyBuilder::run(self : LazyBuilder[A]) -> Lazy[A]

    LazyBuilder::run_force

    fn[A] LazyBuilder::run_force(self : LazyBuilder[A]) -> A

    LazyRec

    type LazyRec[A]

    impl Show for LazyRec[T]

    LazyRec::force

    fn[A] LazyRec::force(self : LazyRec[A]) -> A

    LazyRec::get

    fn[A, B] LazyRec::get(self : LazyRec[A], f : (A) -> B) -> B

    LazyRec::modify

    fn[A] LazyRec::modify(self : LazyRec[A], f : (A) -> A) -> Unit

    LazyRec::new

    fn[A] LazyRec::new(f : (Lazy[A]) -> A) -> LazyRec[A]