2020-03-05

ブログのCSS

ブログ用のCSSをちょっといじってみた。pandocで出力されるHTMLファイルには勝手にCSSクラス名を付けてくれるので、それに合わせてCSSファイルを書けば色が付くのだが、全部自分でやったらかかる手間は並大抵のものではない。

せっかく自分のサイトなので出来合いのものではなく自作しようと決めたものの、でもブラウザ間の差は埋めるべきだと思ったのでnormalize.css をまず採用した。

あとはまあ色々調べながら適当に。コードブロックは普段僕が使ってるターミナルみたいに黒い背景の色にしてみた。せっかくなのでHaskellのコードブロックについてはちょっと色も付けてみた。いつも使っているVimのシンタックスハイライトと同じ色合いに。最初のブログ記事が一番よく違いが出ていると思う。

…と思ってこの記事を読み返したら色の付き方が思ってたのと違う!出力する CSSクラス名を修正しないと直せないから100%狙い通りの色付けを行うのは困難を極めそうだ。

Haskell Cabalでexecutableの単体テスト

この前作ったラムダ計算のプログラムでちょっと自信のないところがあったので単体テストを作成することにした。Haskellのビルドツールであるcabalでは test-suiteスタンザを記述することでテストを置くことができるが、テスト対象のモジュールをインポートして使いたいならexecutableじゃなくて libraryにしなければならない(privateでも可)。

例えば、最初の状態がexecutableしかない構成の場合:

-- foo.cabal

-- 前略

executable foo
  main-is:            Main.hs
  other-modules:      Foo
  build-depends:      base >=4.13 && <=4.14
  hs-source-dirs:     src
  default-language:   Haskell2010
  ghc-options:        -Wall -threaded

この場合、まずexecutable fooスタンザをlibrary化した後に、 test-suiteスタンザを加えると上手くいく:

-- foo.cabal (修正後)

-- 前略

library                                        -- (1)
  exposed-modules:    Foo.Foo
                      Foo.Main                 -- (2)
  build-depends:      base >=4.13 && <=4.14
  hs-source-dirs:     src
  default-language:   Haskell2010
  ghc-options:        -Wall

executable foo
  main-is:            src/foo.hs               -- (3a)
  -- other-modules:
  build-depends:      foo, base                -- (4a)
  -- hs-source-dirs:                           -- (3b)
  default-language:   Haskell2010
  ghc-options:        -Wall -threaded

test-suite unittest
  type:               exitcode-stdio-1.0
  main-is:            Main.hs
  other-modules       Foo.FooSpec
  build-depends:      foo, base                -- (4b)
                    , QuickCheck
                    , hspec
  hs-source-dirs:     test/unittest
  default-language:   Haskell2010
  ghc-options:        -Wall

ポイントがいくつかある。

なるべく手間を減らし、かつcabalをきれいに使うやり方だと自分で思っているけどやはりめんどくさい。。。executableを直接test-suitebuild-dependsに書いてインポートできるようになってくれないだろうか。結構よくある用途な気がするんだが……

お問い合わせはこちらまで: @matil019 リプにブログのリンクを含めていただけるとスムーズに会話できます。
記事一覧