Facebook
From Unreliable Human, 10 Years ago, written in Haskell.
This paste is a reply to Untitled from Paltry Coyote - go back
Embed
Viewing differences between Untitled and Re: Untitled
thenEitherA :: (Eq q1, Eq q2) => Auto a (Either q1 q2) -> Auto a (Either q1 q2) -> Auto a (Either q1 q2)
thenEitherA (A s1 ini1 ac1 t1) (A s2 ini2 ac2 t2) = (A st init acc tr) where
        st = s1 ++ s2
        init =  if any ac1 ini1 then 
                                ini1 ++ ini2 
                        else 
                                ini1
        acc s = ac2 s
        tr s w =         let l1 = t1 s w 
                                        in         if (not (l1 == [])) then
                                                        if any ac1 l1 then
                                                                (l1 ++ ini2) 
                                                        else
                                                                l1
                                                else
                                                        if (not (t2 s w == [])) then
                                                                (t2 s w) 
                                                        else 
                                                                []
                                        
thenaA :: (Eq q1, Eq q2) => Auto a q1 -> Auto a q2 -> Auto a (Either q1 q2)
thenaA (A s1 ini1 ac1 t1) (A s2 ini2 ac2 t2) = thenEitherA (leftA (A s1 ini1 ac1 t1)) (rightA (A s2 ini2 ac2 t2))