我設法獲得了 monad 轉換器 MaybeT 的編譯代碼。(我正在關注haskell wikibook)
但是,我似乎無法讓我的代碼列印任何東西
askPassphrase在 ghci 上運行,我得到一個非實體錯誤:No instance for (Data.Functor.Classes.Show1 IO) arising from a use of ‘print’
我什至不知道如何閱讀錯誤!Ano instance of Show對我來說更有意義。
到目前為止我所嘗試的:基本上是把我的頭撞到墻上。我什至不知道該嘗試什么。也許我可以為 print 寫一個專門的版本MaybeT IO String,但這似乎違背了目的......
就像是
p :: Show a => MaybeT IO a -> IO ()
p maybeIO= do a' <- runMaybeT maybeIO
print a'
作業,但似乎錯了......我不能讓它從里面列印MaybeT IO嗎?
MaybeT IO 字串代碼如下
import Control.Monad
import Control.Applicative
import Control.Monad.Trans
import Control.Monad.Trans.Maybe
isValid :: String -> Bool
isValid s = length s >= 8
getPassphrase :: MaybeT IO String
getPassphrase = do s <- lift getLine
guard (isValid s)
return s
askPassphrase :: MaybeT IO ()
askPassphrase = do lift $ putStrLn "Insert your new passphrase:"
value <- getPassphrase
lift $ putStrLn "Storing in database..."
uj5u.com熱心網友回復:
使用runMaybeT:
> runMaybeT askPassphrase
Insert your new passphrase:
asdf
Nothing
> runMaybeT askPassphrase
Insert your new passphrase:
asdfghjk
Storing in database...
Just ()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/468443.html
下一篇:Python函式式迭代演算法?
