2024.11.14
いまさらNode.jsを知ろう~環境構築も~
2022.06.24
プログラミングHaskellのdo記法について
haskellのdo記法は手続き型言語のような記述が可能ですが、糖衣構文であるため脱糖した際にどのようになるのかを調べた際のメモです。
以下を参考にさせていただきました。
https://qiita.com/saltheads/items/6025f69ba10267bbe3ee
(1) do { m1 } ==> m1 (2) do { m1; m2 } ==> m1 >> do { m2 } (3) do { let s1; m1 s1 } ==> let s1 in do { m1 s1 } (3’) do { let s1; m1 s1 } ==> do { m1 s1 } where s1 (4) do { x <- m1; m2 x } ==> m1 >>= (\x -> do { m2 x } ) (5) do { x <- m1; let s = f x; m2 s } ==> do { s <- f <$> m1; m2 s } (6) do { x <- m1; y <- m2; let s = f x y; m3 s } ==> do { s <- f <$> m1 <*> m2; m3 s } (7) let s1; let s2 ==> let (s1; s2) (8) (\x -> f x) ==> f
module Main where import Lib main :: IO () main = do putStrLn "(1)Hello, what is your name?" name <- getLine putStr "(1)Hello, " putStr name putStr "!"
test2 > stack exec test2-exe (1)Hello, what is your name? name1 (1)Hello, name1! test2 >
module Main where import Lib main :: IO () main = putStrLn "(2)Hello, what is your name?" >> getLine >>= \name -> putStr "(2)Hello, " >> putStr name >> putStr "!"
test2 > stack exec test2-exe (2)Hello, what is your name? name2 (2)Hello, name2! test2 >
do記法と書き換え後で同じ動作であることが確認できました。
以上。
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索