小编Jef*_*eff的帖子

Haskell:通过"原理转换"简化函数

在我的计算机科学课上过去一两周,我们被问到如何通过"原则转换"简化和缩短功能.我们还没有收到有关这些作业的反馈,所以我不知道我是否做得对.

这是我最近的练习,以及我尝试解决方案:

Show by a series of principled transformations that we can define:
    char :: Char -> Parser Char
    char c = satisfy (c==)
as
    char :: Char -> Parser Char
    char = satisfy . (==)
Run Code Online (Sandbox Code Playgroud)

我的尝试:

char c = satisfy (c==)
=> char c = satisfy . c==
=> char c = satisfy . flip ==c
=> char = satisfy . flip ==
=> char = satisfy . (==)
Run Code Online (Sandbox Code Playgroud)

我可以得到一些反馈吗?为赋值提供的代码是不完整的,因此我无法编译它并测试以查看每个转换是否有效.我尝试编写一组类似的函数来自己测试转换,但遗憾的是我对Haskell非常不好,所以我也无法解决这个问题.

haskell transformation

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

Haskell:if-then-else解析错误

我正在研究Read ComplexInt的一个实例.

这是给出的:

data ComplexInt = ComplexInt Int Int
deriving (Show)
Run Code Online (Sandbox Code Playgroud)

module Parser (Parser,parser,runParser,satisfy,char,string,many,many1,(+++)) where

import Data.Char
import Control.Monad
import Control.Monad.State

type Parser = StateT String []

runParser :: Parser a -> String -> [(a,String)]
runParser = runStateT

parser :: (String -> [(a,String)]) -> Parser a
parser = StateT

satisfy :: (Char -> Bool) -> Parser Char
satisfy f = parser $ \s -> case s of
    [] -> []
    a:as -> [(a,as) | f a]

char :: Char …
Run Code Online (Sandbox Code Playgroud)

parsing haskell if-statement

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

标签 统计

haskell ×2

if-statement ×1

parsing ×1

transformation ×1