タグ

ブックマーク / qiita.com/fumieval (2)

  • Ersatzを使って数独を解く - Qiita

    ErsatzはSATソルバの入力をモナドの力で生成してくれるライブラリ。適当にexistsとassertを並べればうまくやってくれるらしい。ということで、数独ソルバを実装してみた。素晴らしい… import Prelude hiding ((||), (&&), not, and, or) import Data.Char import Data.Array import Data.Ix import Data.Word import Control.Monad import Control.Monad.State import Ersatz -- (ersatz-0.2) fieldRange = ((1,1),(9,9)) unique :: Equatable a => [a] -> Bit unique = go [] where go ss (x:xs) = and (map (

    Ersatzを使って数独を解く - Qiita
  • Haskellでオブジェクト指向プログラミング - Qiita

    Lensを活用すれば、オブジェクト指向すら表現できる…これが、Haskellの力なのか… クラスはデータ型、メソッドはインスタンスの状態を変更するStateモナド、インスタンスはIORefに対応している。 {-# LANGUAGE TemplateHaskell, Rank2Types, ExistentialQuantification #-} import Control.Lens import Control.Applicative import Control.Monad.State import Control.Monad.IO.Class import Data.IORef infix 9 .- infix 9 .! data Vec2 = Vec2 Float Float deriving Show (&+) :: Vec2 -> Vec2 -> Vec2 Vec2 x0 y

    Haskellでオブジェクト指向プログラミング - Qiita
  • 1