nobsun です

> Heskell で Template Method を実現するにはどうやるのだろう、と
> 考えてみました。

Template Method という用語が何を指すのか知らないのですが、
 
> x = MyFoo
> main = foo x
> 
> class Foo a where
>     foo :: a -> IO ()
>     bar :: a -> IO ()
>     foo x = do
>         bar x
> 
> data MyFoo = MyFoo
> 
> instance Foo MyFoo where
>     bar x = print "Foo bar"
> 
> これで動くことは動いたのですが
> 激しく間違っているような気がしてなりません..

これは、ごくふつうの class メソッドの定義の仕方です。foo は
デフォルトメソッドですので、

instance Foo MyFoo where
  foo x = print "Foo foo"
  bar x = print "Foo bar"

とすることもできます。

{- ひょっとすると別の意図がありますか。 -}

--
Nobuo Yamashita                 mailto:nobsun / sampou.org
  I love programming.           http://www.sampou.org/
  I love pencil puzzles.        http://www.puzzle.jp/


--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/