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' )
  • 相关阅读:
    什么是原型(prototype)
    angularjs input指令
    angularjs 弹出框 $modal (转)
    windows下安装wabt
    windows下安装emscripten
    windows下安装mingw
    windows下安装git
    windows下安装cmake
    windows下安装python
    trunc与round
  • 原文地址:https://www.cnblogs.com/liankewei/p/15553710.html
Copyright © 2011-2022 走看看