相关疑难解决方法(0)

如何从一元行动中提取价值

是否有带签名的内置功能:: (Monad m) => m a -> a

Hoogle告诉我们没有这样的功能.

你能解释一下原因吗?

monads haskell comonad

39
推荐指数
6
解决办法
1万
查看次数

打开一个monad

鉴于以下计划,我遇到了与monad打交道的问题.

module Main 
where
import System.Environment
import System.Directory
import System.IO
import Text.CSV

--------------------------------------------------

exister :: String -> IO Bool
exister path = do
  fileexist <- doesFileExist path 
  direxist  <- doesDirectoryExist path
  return (fileexist || direxist )

--------------------------------------------------
slurp :: String -> IO String 
slurp path = do
  withFile path ReadMode (\handle -> do
                             contents <- hGetContents handle
                             last contents `seq` return contents )
--------------------------------------------------    
main :: IO ()
main = do
  [csv_filename] <- getArgs
  putStrLn (show csv_filename)
  csv_raw <- slurp …
Run Code Online (Sandbox Code Playgroud)

haskell

5
推荐指数
2
解决办法
3843
查看次数

如何在 Haskell 中使用来自不同类型 monad 的值

老实说,我觉得这必须有一个傻瓜的地方,但我找不到 甚至 搜索

假设我有以下代码来简单地从用户那里读取一个 double 并将其回显:

import qualified Control.Monad.Except as E
import Text.Read(readMaybe) 

data Error = ParseError String
             | Default String deriving (Show)

type ThrowsError = Either Error 

main = do
  putStrLn "Enter your number: "
  val <- getDouble
  print val

parseString :: String -> ThrowsError Double
parseString val = maybe (E.throwError $ ParseError val) return 
                        (readMaybe val :: Maybe Double)

getDouble :: ThrowsError Double
getDouble = getLine >>= parseString
Run Code Online (Sandbox Code Playgroud)

这在两个地方中断:

  1. main,putStrLn是类型IO …

monads haskell types

2
推荐指数
1
解决办法
77
查看次数

Haskell从IO a转换为ma

我想将monadic值转换为另一个Monad类的monadic值.

让我们说我有一个实例声明:

    instance ClassM TypeT where
        funcX = abc >>= \x -> return (x)
Run Code Online (Sandbox Code Playgroud)

ClassM:是一个自己的monad定义类
TypeT:是一个自己定义的类型/数据,带有monad实现实现
abc:类型为IO a

我如何将abc :: IO a
的monadic值转换为classM的monadic值m => ma
又名m1 a - > m2 a(其中m1不是m2)(例如:IO 5 - >只是5)

我对funcX的实现显然不正确.如果有可能,那么正确的实施应该是什么?

感谢您的时间和帮助.

monads haskell

1
推荐指数
1
解决办法
1514
查看次数

将IO [String]转换为String

我完成了页面卷曲的内容.找到正确的数据并在其基础上形成以下查询.但数据属于类型IO [String].要求简单String.如何转换IO [String]String

haskell

0
推荐指数
1
解决办法
717
查看次数

标签 统计

haskell ×5

monads ×3

comonad ×1

types ×1