
Haskell
zwvista
这个作者很懒,什么都没留下…
展开
-
Haskell语言学习笔记(40)Arrow(1)
Arrowclass Category a => Arrow a where arr :: (b -> c) -> a b c first :: a b c -> a (b,d) (c,d) first = (*** id) second :: a b c -> a (d,b) (d,c) second = (id ***) (***) :: a b c -原创 2017-11-30 18:55:59 · 856 阅读 · 0 评论 -
Haskell语言学习笔记(51)Comonad
Comonadclass Functor w => Comonad w where extract :: w a -> a duplicate :: w a -> w (w a) duplicate = extend id extend :: (w a -> b) -> w a -> w b extend f = fmap f . duplicateComonad 是个类型类。比较原创 2017-12-01 19:54:10 · 671 阅读 · 0 评论 -
Haskell语言学习笔记(52)正则表达式
Text.Regex.PCRE.Heavy$ brew install pcre$ cabal install pcre-heavyInstalled pcre-heavy-1.0.0.2Prelude> :m +Text.Regex.PCRE.HeavyPrelude Text.Regex.PCRE.Heavy> Prelude Text.Regex.PCRE.Heavy> :set -X原创 2017-12-01 19:54:50 · 966 阅读 · 0 评论 -
Haskell语言学习笔记(53)Data.Sequence
Data.SequenceConstructionPrelude Data.Sequence> emptyfromList []Prelude Data.Sequence> singleton 3fromList [3]Prelude Data.Sequence> 3 <| fromList [4,5]fromList [3,4,5]Prelude Data.Sequence> from原创 2017-12-14 22:35:55 · 589 阅读 · 0 评论 -
Haskell语言学习笔记(54)Data.Set
Data.SetConstructionPrelude> import Data.Set as SPrelude S> emptyfromList []Prelude S> singleton 5fromList [5]Prelude S> insert 3 $ fromList [4,5]fromList [3,4,5]Prelude S> delete 5 $ fromList [原创 2017-12-14 22:36:38 · 658 阅读 · 0 评论 -
Haskell语言学习笔记(71)Semigroup
Semigroupclass Semigroup a where (<>) :: a -> a -> a sconcat :: NonEmpty a -> a stimes :: Integral b => b -> a -> aclass Semigroup a => Monoid ...原创 2018-07-16 19:59:21 · 607 阅读 · 0 评论 -
Haskell语言学习笔记(72)Free Monad
安装 free 包$ cabal install freeInstalled free-5.0.2Free Monaddata Free f a = Pure a | Free (f (Free f a))instance Functor f => Functor (Free f) where fmap f = go where go (Pure a...原创 2018-07-16 19:59:56 · 462 阅读 · 0 评论 -
Haskell语言学习笔记(73)Existentials
Existentials(存在类型)Existentially quantified types(Existentially types,Existentials)是一种将一组类型归为一个类型的方式。 通常在使用 type, newtype, data 定义新类型的时候,出现在右边的类型参数必须出现在左边。 存在类型可以突破此限制。实例{-# LANGUAGE Existe...原创 2018-07-16 20:00:24 · 325 阅读 · 0 评论 -
Haskell语言学习笔记(74)GADT
GADTsGADTs(Generalised Algebraic Data Types,广义代数数据类型)是对代数数据类型的一种扩展。 它允许在定义数据类型时明确指定类型参数的类型并使用模式匹配。--ADTdata Maybe a = Nothing | Just a--GADTdata Maybe a where Nothing :: May...原创 2018-07-16 20:00:51 · 780 阅读 · 0 评论 -
Haskell语言学习笔记(50)Extra
Extra安装 extra 模块。$ cabal install extraInstalled extra-1.6Prelude> :m +ExtraPrelude Extra> Data.List.Extra String operationsPrelude Extra> lower "This is A TEST""this is a test"Prelude Extra> upper原创 2017-12-01 19:53:23 · 398 阅读 · 0 评论 -
Haskell语言学习笔记(49)ByteString Text
Data.ByteStringString 是 [Char] 的同义词,在使用上存在List的惰性所带来的性能问题。 在处理大型二进制文件时,可以使用 ByteString 来代替 String。 ByteString 类型分为以下两种: * Lazy 模块 Data.ByteString.Lazy 中的 Data.ByteString.Lazy.ByteString Lazy 模块内部使用原创 2017-12-01 19:52:40 · 729 阅读 · 0 评论 -
Haskell语言学习笔记(48)Data.Tuple
Data.Tuplefst :: (a,b) -> afst (x,_) = xsnd :: (a,b) -> bsnd (_,y) = ycurry :: ((a, b) -> c) -> a -> b -> ccur原创 2017-12-01 19:51:38 · 854 阅读 · 0 评论 -
Haskell语言学习笔记(41)Parsec(1)
ParsecParsec是一个词法及语法分析器。匹配字符与字符串Prelude Text.Parsec> parseTest anyChar "a"'a'Prelude Text.Parsec> parseTest (char 'a') "a"'a'Prelude Text.Parsec> parseTest (satisfy (=='a')) "a"'a'Prelude Text.Pa原创 2017-11-30 18:56:31 · 1183 阅读 · 0 评论 -
Haskell语言学习笔记(42)Bifunctor
Bifunctorclass Bifunctor p where bimap :: (a -> b) -> (c -> d) -> p a c -> p b d bimap f g = first f . second g first :: (a -> b) -> p a c -> p b c first f = bimap f id second :: (b -> c) -> p原创 2017-11-30 18:57:10 · 431 阅读 · 0 评论 -
Haskell语言学习笔记(43)Parsec(2)
组合子 1Prelude Text.Parsec Text.Parsec.String> parseTest (count 3 (char 'a')) "aaa""aaa"Prelude Text.Parsec Text.Parsec.String> parseTest (between (char '(') (char ')') anyChar) "(3)"'3'Prelude Text.原创 2017-11-30 18:57:48 · 613 阅读 · 0 评论 -
Haskell语言学习笔记(44)Lens(2)
preview, reviewPrelude Control.Lens> view _Left (Left "abc")"abc"Prelude Control.Lens> view _Right (Right "abc")"abc"Prelude Control.Lens> view _Just (Just "abc")"abc"Prelude Control.Lens> previe原创 2017-11-30 18:58:40 · 616 阅读 · 0 评论 -
Haskell语言学习笔记(5)Applicative
Applicative Functor原创 2017-01-30 18:54:39 · 1568 阅读 · 0 评论 -
Haskell语言学习笔记(45)Profunctor
Profunctorclass Profunctor p where dimap :: (a -> b) -> (c -> d) -> p b c -> p a d dimap f g = lmap f . rmap g lmap :: (a -> b) -> p b c -> p a c lmap f = dimap f id rmap :: (b -> c) -> p a b -原创 2017-12-01 19:49:14 · 560 阅读 · 0 评论 -
Haskell语言学习笔记(46)Parsec(3)
Applicative Parsing使用 Applicative 式的 Parser。 包括使用 (<>),(<\*>),(<>), (<\*>), (<), (<*), (*>), (<|>), many 等运算符。应用实例1import Control.Monadimport Text.Parsecimport Control.Applicative hiding ((<|>))numb原创 2017-12-01 19:50:00 · 596 阅读 · 0 评论 -
Haskell语言学习笔记(47)Arrow(2)
Function, Monad, Arrowf :: Int -> (Int, Int)f = \x -> let y = 2 * x z1 = y + 3 z2 = y - 5 in (z1, z2)-- ghci> f 10-- (23, 15)fM :: Int -> Identity (Int, Int)fM = \x -> do y <- re原创 2017-12-01 19:50:56 · 575 阅读 · 0 评论 -
Haskell语言学习笔记(75)Conduit
安装 conduit$ cabal install conduitInstalled conduit-1.3.0.3Prelude> import ConduitPrelude Conduit> ConduitConduit 是一个处理流的库。Prelude Conduit> :{Prelude Conduit| print $ runCo...原创 2018-07-16 20:01:22 · 355 阅读 · 0 评论 -
Haskell语言学习笔记(76)Data.Tree
Data.Treedata Tree a = Node { rootLabel :: a, subForest :: Forest a } deriving (Eq, Read, Show)type Forest a = [Tree a]Data.Tree 是一种非空(存在根节点),可以有无限分支,每个节点均可有多路分支的Tree类型。...原创 2018-07-16 20:01:48 · 883 阅读 · 0 评论 -
Haskell语言学习笔记(62)Divisible
Divisibleclass Contravariant f => Divisible f where divide :: (a -> (b, c)) -> f b -> f c -> f a conquer :: f adivided :: Divisible f => f a -> f b -> f (a, b)divi...原创 2018-07-15 09:59:09 · 299 阅读 · 0 评论 -
Haskell语言学习笔记(63)Dicidable
Dicidableclass Divisible f => Decidable f where lose :: (a -> Void) -> f a choose :: (a -> Either b c) -> f b -> f c -> f alost :: Decidable f => f Voidlost = lose i...原创 2018-07-15 09:59:47 · 193 阅读 · 0 评论 -
Haskell语言学习笔记(64)Lens(4)
Prisms{-# LANGUAGE TemplateHaskell, RankNTypes #-}import Control.Lensdata NewTask = SimpleTask String | HarderTask String Int | CompoundTask String [NewTask] deriving (Show)makePrism...原创 2018-07-15 10:01:41 · 325 阅读 · 0 评论 -
Haskell语言学习笔记(65)Lens(5)
手动计算 set mapped 5 [1,2,3]set l b = runIdentity . l (\_ -> Identity b)mapped = sets fmapsets f g = taintedDot (f (untaintedDot g))instance Settable Identity where untainted = runIdentity ...原创 2018-07-15 10:05:01 · 242 阅读 · 0 评论 -
Haskell语言学习笔记(66)Aeson
Data.Aeson安装 aeson$ cabal install aesonInstalled aeson-1.2.3.0Prelude> :m +Data.AesonPrelude Data.Aeson> Data.Aeson 是一个处理 JSON 数据的库。处理 Person{-# LANGUAGE DeriveGeneric, Overlo...原创 2018-07-15 10:05:30 · 320 阅读 · 0 评论 -
Haskell语言学习笔记(67)Gtk2Hs
Gtk2Hs$ brew cask install xquartz$ brew install glib cairo gtk gettext fontconfig freetype$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$ cabal install alex happy$ cabal install gtk2hs-bui...原创 2018-07-15 10:06:10 · 419 阅读 · 0 评论 -
Haskell语言学习笔记(68)HDBC
安装 HDBC-Sqlite3$ cabal install HDBC-Sqlite3Installed HDBC-sqlite3-2.3.3.1Prelude> :m Database.HDBC Database.HDBC.Sqlite3Prelude Database.HDBC Database.HDBC.Sqlite3>DB 操作Prelude Da...原创 2018-07-15 10:20:45 · 490 阅读 · 0 评论 -
Haskell语言学习笔记(69)Yesod
YesodYesod 是一个使用 Haskell 语言的 Web 框架。安装 Yesod首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安装失败)$ cabal install yesodInstalled yesod-1.4.5Hello World-- helloworld.hs{-# LA...原创 2018-07-15 10:21:21 · 484 阅读 · 0 评论 -
Haskell语言学习笔记(61)Distributive
Distributiveclass Functor g => Distributive g where distribute :: Functor f => f (g a) -> g (f a) distribute = collect id collect :: Functor f => (a -> g b) -> f a -...原创 2018-07-15 09:58:25 · 212 阅读 · 0 评论 -
Haskell语言学习笔记(60)Biapplicative
Biapplicativeclass Bifunctor p => Biapplicative p where bipure :: a -> b -> p a b (<<*>>) :: p (a -> b) (c -> d) -> p a c -> p b d (*>>) :: p a b -&g原创 2018-07-14 21:17:05 · 178 阅读 · 0 评论 -
Haskell语言学习笔记(59)Bitraversable
Bitraversableclass (Bifunctor t, Bifoldable t) => Bitraversable t where bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> t a b -> f (t c d) bitraverse f g = bise...原创 2018-07-14 21:16:32 · 290 阅读 · 0 评论 -
Haskell语言学习笔记(77)Lens(6)
ixPrelude Control.Lens> [1,2,3] ^? ix 1Just 2Prelude Control.Lens> [1,2,3] ^?! ix 12Prelude Control.Lens> [1,2,3] & (ix 1) .~ 20[1,20,3]atrelude Control.Lens> import q...原创 2018-07-16 20:02:18 · 323 阅读 · 0 评论 -
Haskell语言学习笔记(78)fix
fix 函数fix 是一个在 Data.Function 模块中定义的函数,它是对于递归的封装,可以用于定义不动点函数。fix :: (a -> a) -> afix f = let x = f x in xfix 函数的定义使用了递归绑定,比较难以理解:fix f= let x = f x in x= let x = f x in f x= let x...原创 2018-07-16 20:02:50 · 883 阅读 · 0 评论 -
Haskell语言学习笔记(79)lambda演算
lambda演算根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义、函数如何被应用以及递归的形式系统。lambda项lambda演算由 lambda 项的语言构成。基本的 lambda 项只包含以下三种: 语法 名称 描述 Haskell语言中的...原创 2018-07-16 20:03:16 · 1819 阅读 · 0 评论 -
Haskell语言学习笔记(80)req
reqreq 是一个好用,类型安全,可扩展,上层的HTTP客户端的库。$ cabal install reqInstalled req-1.1.0Prelude> :m +Network.HTTP.ReqPrelude Network.HTTP.Req> 官方示例{-# LANGUAGE OverloadedStrings, DeriveGeneric...原创 2018-07-16 20:03:41 · 383 阅读 · 1 评论 -
Haskell语言学习笔记(55)Data.Vector
Data.VectorConstructionPrelude V> import Data.Vector as VPrelude V> V.empty[]Prelude V> V.singleton 1[1]Prelude V> V.replicate 5 1[1,1,1,1,1]Prelude V> generate 5 (+1)[1...原创 2018-07-14 20:56:46 · 466 阅读 · 0 评论 -
Haskell语言学习笔记(56)Lens(3)
手动计算(view, over, set, to, _1)view l = getConst . l Constover l f = runIdentity . l (Identity . f)set l b = runIdentity . l (\_ -> Identity b)to k = dimap k (contramap k)instance Field1 ...原创 2018-07-14 21:14:48 · 249 阅读 · 0 评论 -
Haskell语言学习笔记(57)Parsec(4)
Parser 类型data ParsecT s u m atype Parsec s u = ParsecT s u Identitytype Parser = Parsec String ()data ParsecT s u m a ParsecT 带四个类型参数:数据流类型 s,用户状态类型 u,底层Monad类型 m,返回类型 a。 ParsecT 是一个Monad转...原创 2018-07-14 21:15:27 · 454 阅读 · 0 评论