見た目がひどい型をTypeOperatorsで改善したらロジックと同じ見た目になった

before

myLayoutHook :: Choose (ModifiedLayout Gaps (Choose (ModifiedLayout (Decoration TabbedDecoration DefaultShrinker) (ModifiedLayout (Sublayout Simplest) TwoPane)) Grid)) Full Window
myLayoutHook = (taskbarMargin $ twoTabbedPane ||| Grid) ||| Full
  where
    taskbarMargin = gaps [(D, 40)]
    twoTabbedPane = subTabbed $ TwoPane (1/55) (1/2)

after

infixr 1 :$
type (:$) = ModifiedLayout

type (:.) x y z = x :$ (y :$ z)

infixr 2 :|||
type (:|||) = Choose

type MyLayoutHook  = (TaskbarMargin :$ TwoTabbedPane :||| Grid) :||| Full
type TaskbarMargin = Gaps
type TwoTabbedPane = SubTabbed TwoPane
type SubTabbed x   = (Decoration TabbedDecoration DefaultShrinker :. Sublayout Simplest) x

myLayoutHook :: MyLayoutHook Window
myLayoutHook = (taskbarMargin $ twoTabbedPane ||| Grid) ||| Full
  where
    taskbarMargin = gaps [(D, 40)]
    twoTabbedPane = subTabbed $ TwoPane (1/55) (1/2)

比較

type MyLayoutHook = (TaskbarMargin :$ TwoTabbedPane :||| Grid) :||| Full
{--} myLayoutHook = (taskbarMargin  $ twoTabbedPane  ||| Grid)  ||| Full

Haskellの表現力はすごい 🐕

筆者プロフィール

my-latest-logo

aiya000(あいや)

せつラボ 〜圏論の基本〜」 「せつラボ2~雲と天使と関手圏~」 「矢澤にこ先輩といっしょに代数!」を書いています!

強い静的型付けとテストを用いて、バグを防ぐのが好き。Haskell・TypeScript。