challenge メソッドのフック

例えば、あるクラスのあるメソッドを実行する前に他の処理を呼びたい(例えばログやトランザクション開始など)。 また、そのメソッドの終了後にも何らかの後処理を呼びたい(トランザクション終了など)。

そのような、メソッドに対するフック処理を書いてください。 ライブラリを使用してメソッドのフックを実現した場合は ライブラリの名前を紹介してくれると助かります。

Posted feedbacks - Haskell

Haskellでは、フックするということを、関数に前処理、後処理を追加すると読み替えることになるのかなぁ。いくつかのパターンがありそうだけど、とりあえず、一般の関数、モナドの例をあげておきましょう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import Control.Monad

addBeforeHook :: (a -> a) -> (a -> b) -> (a -> b)
addAfterHook  :: (b -> b) -> (a -> b) -> (a -> b)

addBeforeHook h f = f . h
addAfterHook  h f = h . f

addBeforeHookM :: Monad m => (a -> m a) -> (a -> m b) -> (a -> m b)
addAfterHookM  :: Monad m => (b -> m b) -> (a -> m b) -> (a -> m b)

addBeforeHookM h f x = h x >>= f
addAfterHookM  h f x = f x >>= h

Index

Feed

Other

Link

Pathtraq

loading...