1
가능한 한 다음 구문에 가깝게하고 싶습니다. TH는 나에게 잘해.여러 함수에 모나드 변수 바인딩하기
bootapplication :: IO()
bootapplication = do
clientA <- newChan :: IO (Chan AMsg)
clientB <- newChan :: IO (Chan BMsg)
...
magicHappens
doSomething :: SomeSortaMonadTOnIO()
doSomething = do
writeChan clientA aMsg
writeChan clientB bMsg
나는 다음은
main = do
clientA <- newChan :: IO (Chan [Char])
clientB <- newChan :: IO (Chan Whatever)
let a = putStrLn . (++) "a"
let moof = do
-- b "hello"
a "hi"
-- d "meh"
readChan clientA
return()
let b = putStrLn . (++) "b"
let d = putStrLn . (++) "c"
return()
허용하지만하자 만 바인딩 향후 작품 때문에 주석 처리 된 줄이 수용 할 수없는 가정합니다. 나는 이것을 어떻게 할 수있게 해머와 덕트 테이프를 어떻게 할까?
편집 :
main = do
clientA <- newChan :: IO (Chan [Char])
clientB <- newChan :: IO (Chan Whatever)
let
a = putStrLn . (++) "a"
moof = do
b "hello"
a "hi"
d "meh"
readChan clientA
return()
b = putStrLn . (++) "b"
d = putStrLn . (++) "c"
return()
는 다른 방법이 where
를 사용할 수 있습니다
내가 정확한 질문에 대답
main = do
clientA <- newChan :: IO (Chan [Char])
clientB <- newChan :: IO (Chan Whatever)
let {
a :: [Char] -> IO()
;a = putStrLn . (++) "a"
;moof :: IO()
;moof = do
a "a"
b "b"
;b :: [Char] -> IO()
;b = putStrLn . (++) "b"
;d :: [Char] -> IO()
;d = putStrLn . (++) "c"
}
moof
return()
나는 모든 기능이 moof처럼 보일 가능성이 높다는 것을 의미합니다. 그래서 나는 그걸 밖으로 움직일 수는 없습니다. 하지만, 여러 가지를 바인딩 할 수있게하는 것이 좋습니다. 자, 첫 번째 코드 세그먼트의 let 블록에 들여 쓰기를 취소 할 방법이 있습니까? 그것이 나의 궁극적 인 목표입니다. – Evan
@Evan 이들은 언어의 통사론적인 규칙이다. 그러나 당신의 질문에 근본적인 실수가 있었기 때문에 걱정할 필요조차 없다고 생각합니다. 내 답변에 대한 업데이트를 참조하십시오. –
나는 세그먼트가 어떻게 실행될 지에 대해별로 관심이 없었다. 내가 관심을 가졌던 구문을 보여 주기만하면되었다. – Evan