koyama41
実のところ、 ghc に関しては ghci を起動しちゃえばわかるじゃん、という回秘策を使っていたので、真面目に調べていなかったのです… 今回 haddock のバージョンを知りたくなってハマった、というのが正直なところです :sweat_smile:
fdToHandle するなら createPipeFd ではなく createPipe を使った方がよいのではないかと。Tree とは別のやり方を試してみました。また、おかしな所があればご指摘いただけると嬉しいです。sortBy row b がダブってますね。。。sortOn :: Ord b => (a -> b) -> [a] -> [a]loop を State -> Maybe State ではなくて getStates とおなじ State -> [State] にすると、場合分けが null empties = [(filled, [])] か otherwise = concatMap loop $ getState states だけで済む(たぶん)ので簡単になりそうですfilled = filter ((/= 0) . num) board empties = filter ((== 0) . num) board
partition を使って(filled, empties) = partition ((/= 0) . num) board
partition の型は (a -> Bool) -> [a] -> ([a], [a]) と類推でき, ghci でこの型や sortBy の型を検索すると以下のようになります.classify = flip div 3
classify = (`div` 3)
null empties = [state] としてしまえば filled のほうの名前も要らなくなりそうですねloop state@(_,[]) = [state] と loop state = concatMap loop $ getStates state にしたほうがすっきりするかもstack path --dist-dir で出来るやつですcabal-doctest を使うのが解決方法のようです。IO に関して言えば大半がそれに該当しそうな気がしますが... (例外を投げるとかスレッドを作るとか?cabal-plan list-bins が使えます。 http://hackage.haskell.org/package/cabal-plan