Skip to content

[CH08] 실습 코드 공유 #67

@PingPingE

Description

@PingPingE
-- do 아래부터 indentation 시작해야함 / tab말고 space로

import Data.Char
main2 = do -- 시작과 끝을 바인딩
    name <- getLine
   
    -- do 에서는 in 생략 (다만 let만 하고 끝내선 안되고 아래 구문 완결을 위한 코드가 있어야함) 
    let big_name = map toUpper name
        big_name2 = map toUpper name
    
    -- let 구문 완결을 위한 코드
    -- $: apply 연산자 / 우선순위를 뒤로 미룸 (없으면 big_name 먼저 프린트 해버림 -> ++ 먼저 연산하도록함)
    putStrLn $ big_name ++ big_name2
    -- 괄호로 대체 가능
    putStrLn (big_name ++ big_name2)
    -- print foo

main :: IO () 
-- main 타입은 마지막 줄의 타입 기반으로 정해짐
main = do
    return ()
    return "haha"
    putStrLn "hh" -- 이게 마지막 줄이면 IO ()
    return "fdaga" -- 이게 마지막 줄이면 Monad m => m String
    
-- do 에 IO 없어도 돌아간다
foo :: Num b => [b]
foo = do
    x <- [1,2,3]
    y <- [10,20,30]
    return $ x+y -- return의 의미: 다른 언어처럼 종료가 아님 ... 다시 functor의 세계로 돌려보낸다
    [x+y]     

-- do  + <- + putStrLn  구문 말고 다른 문법으로 간결하게 getLine하고 프린트 하는 법 : >>=
foo2 = getLine >>= putStrLn --  하스켈 근본 문법(하스켈 로고임)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions