zoukankan      html  css  js  c++  java
  • haskell中的do

    在haskell中,有一个do的语句专门用来做一些不那么“干净”的事情,比如读写都需要用do来开头

    一开始以为do的作用是做monad,后来发现是错误的,其实do做的事情是包裹一个顺序操作

    比如在如下代码中

    main=do
        if 2>1
        then do
            putStrLn "Step 1"
            putStrLn "Step 2"
        else
            putStrLn "Step 3"

    第三行中的do如果缺少的话,编译器会报这个错误

        The function `putStrLn' is applied to three arguments,
        but its type `String -> IO ()' has only one
        In the expression: putStrLn "Step 1" putStrLn "Step 2"
        In a stmt of a 'do' block:
          if 2 > 1 then
              putStrLn "Step 1" putStrLn "Step 2"
          else
              putStrLn "Step 3"
        In the expression:
          do { if 2 > 1 then
                   putStrLn "Step 1" putStrLn "Step 2"
               else
                   putStrLn "Step 3" }

    意思就是,第一个putStrLn被传了3个参数,“Step 1", putStrLn 和"Step 2"。没有写do,编译器就把这一段连续执行的代码认为是一个命令了。

  • 相关阅读:
    PHP入门03 -- 数组与数据结构
    PHP入门02 -- 函数
    PHP入门01 -- 基本语法
    node文章
    Mongodb08
    Mongodb07
    ISO处理jq事件
    map
    Django自定义模板
    JS this指向
  • 原文地址:https://www.cnblogs.com/sickboy/p/3322460.html
Copyright © 2011-2022 走看看