小编use*_*080的帖子

哈斯克尔:陷入IO monad

我试图使用haskell-src-exts包中的parseFile函数解析文件.我正在尝试使用parseFile的输出,这当然是IO,但我无法弄清楚如何绕过IO.我找到了一个函数liftIO,但我不确定这是否是这种情况下的解决方案.这是下面的代码.

import Language.Haskell.Exts.Syntax
import Language.Haskell.Exts 
import Data.Map hiding (foldr, map)
import Control.Monad.Trans

increment :: Ord a => a -> Map a Int -> Map a Int
increment a = insertWith (+) a 1

fromName :: Name -> String
fromName (Ident s) = s
fromName (Symbol st) = st

fromQName :: QName -> String
fromQName (Qual _ fn) = fromName fn
fromQName (UnQual n) = fromName n

fromLiteral :: Literal -> String
fromLiteral (Int int) = show int

fromQOp :: QOp …
Run Code Online (Sandbox Code Playgroud)

io haskell

7
推荐指数
2
解决办法
854
查看次数

Haskell:修复函数中的非执行模式

我有一个程序遍历AST并返回使用的函数和变量的映射以及它们发生的次数.这里是:

import Data.Map
import Language.Haskell.Exts.Syntax

increment :: Ord a => a -> Map a Int -> Map a Int
increment a = insertWith (+) a 1

fromName :: Name -> String
fromName (Ident s) = s
fromName (Symbol st) = st

fromQName :: QName -> String
fromQName (Qual _ fn) = fromName fn
fromQName (UnQual n) = fromName n

fromLiteral :: Literal -> String
fromLiteral (Int int) = show int

fromQOp :: QOp -> Map String Int
fromQOp (QVarOp qn) …
Run Code Online (Sandbox Code Playgroud)

haskell non-exhaustive-patterns

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

Haskell:把一棵树变成一张地图

基本上我想将BST树变成一个映射,其中节点是键,节点的出现次数是值.所以,如果我输入这个:

toMap(叶子13)

我会的

> [(13,1)]
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止:

data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Show)
leaf x = Node x Empty Empty

toMap' :: Int -> Tree a -> ([(a, Int)], Int)
toMap' a Empty = ([], a)
toMap' a (Node x xl xr) = ((x, a): xl' ++ xr', k)
                      where (xl', i) = toMap' (a+1) xl
                            (xr', k) = toMap' (i) xr

toMap :: Tree a -> [(a, Int)]
toMap = fst. toMap' …
Run Code Online (Sandbox Code Playgroud)

binary-tree haskell map

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

标签 统计

haskell ×3

binary-tree ×1

io ×1

map ×1

non-exhaustive-patterns ×1