beautiful people
data Person = Person { isBeautiful :: Bool , isNice :: Bool , isTall :: Bool } deriving Show type People = [Person] people :: People people = let b = [minBound ..] in Person <$> b <*> b <*> b beautiful :: People -> People beautiful = filter isBeautiful nice :: People -> People nice = filter isNice tall :: People -> People tall = filter isTall main :: IO () main = do print $ beautiful people print $ (beautiful . nice) people print $ (beautiful . nice . tall) people
これはなに
職場で Rails の scope の名前を決める際のアドバイスとして,形容詞の限定用法について話していて,引数として述語を与えた filter
関数がまさにそれに当たるのではと思い付いたので書いてみた.
逆に isBeautiful
は叙述用法だろうか.
叙述用法に関して言えば,isBeautiful
のような疑問文は Person -> Bool
型の関数として解釈できるけれども,Alice is beautiful.
のような平叙文は,命題(あるいは内容が真であることが保証できる場合には定理)として捉えられるだろうから,もっと型レベルプログラミングでごにょごにょできそうな匂いもする.
(ぼくはその道の人ではないので,formulae-as-types なんかについては詳しく知らないのだけれども.)