NFA: a(bc)* Just a = nfa [ (1,[(only "a",2)],[]), (2,[(only "b",3)],[]), (3,[(only "c",4)],[]), (4,[],[2]) ] 1 [4] :: Maybe (Nfa Int Char) NFA: .*a. Just a = Nfa.nfa [ (1,[(allExcept "",1),(only "a",2)],[]), (2,[(allExcept "",3)],[]), (3,[],[]) ] 1 [3] NFA: .*(hello|world).* Just a = Nfa.nfa [ (1,[(allExcept "",1)],[2,9]), (2,[(only "h",3)],[]), (3,[(only "e",4)],[]), (4,[(only "l",5)],[]), (5,[(only "l",6)],[]), (6,[(only "o",7)],[]), (7,[],[8]), (8,[(allExcept "",8)],[]), (9,[(only "w",10)],[]), (10,[(only "o",11)],[]), (11,[(only "r",12)],[]), (12,[(only "l",13)],[]), (13,[(only "d",14)],[]), (14,[],[8]) ] 1 [8]