zoukankan      html  css  js  c++  java
  • Haskell学习笔记The state monad 状态变换器

    Haskell学习笔记--The state monad 状态变换器  

    快快快在回宿舍前搞完

    失败了

    状态变换器

    type ST a = State -> ( a , State )

    返回变换后的状态和一个参数a

    type定义的类型不能被弄成monad,所以改成用newtype

    newtype ST a = S (State -> (a,State))

    
    app :: ST a -> State -> (a,State)
    app (S f) x = f x
    
    instance Functor ST where 
      --fmap :: (a->b) -> f a -> f b
      fmap f st = S(\s -> let (x,s') = app st s in (f x,s'))
      --fmap f st = S(\inp -> (f x,s') where (x,s') = app st inp) 
    

     还可以变成applicative

    instance Applicative ST where
        pure :: a  -> ST a
        pure x = S (\s -> (x,s))
    
        (<*>) :: ST (a->b) -> ST a -> ST b
        stf <*> stx = S(\s -> 
                let (f,s') = app stf s 
                    (x,s'') = app stx s' in (f x ,s'')

    还可以弄成Monad

    instance Monad ST where
        --(>>=) ::  ST a -> (a -> ST b) -> ST b
        stx >>= f = S (\s -> 
                        let (x,s') = app stx s in app (f x) s' )
  • 相关阅读:
    占卜DIY
    飞行员兄弟
    给树染色
    国王游戏
    雷达设备
    畜栏预定
    防晒
    去雨系列论文笔记
    First day
    如何用fprintf写十六进制 并控制格式
  • 原文地址:https://www.cnblogs.com/liankewei/p/15553710.html
Copyright © 2011-2022 走看看