runDFA :: DFA → String → Bool
runDFA dfa input = accept dfa $ transition (getInitialState dfa) $ input
f $ g $ x == (f . g) x이므로 함수의 합성 연산 (.)을 이용해 에타-소거하자.
runDFA dfa = (accept dfa) . (transition (getInitialState dfa))
어디서 봤다. 람다 셈법에서의 S combinator에 의하여 (.)가 들어올려져 있는 모습이다.
(r →)이 Monad인데 ap로서 S combinator을 가짐을 이용하면,
runDFA = liftM2 (.) accept (transition . getIntialState)
너무 아름답다 ㅠㅠ
근데 Pointfree.io에서 해보니까 똑같이 나온다.
어떻게 만들었지?
댓글 0