Haskell 为国家实施演出
这个话题之前已经讨论过了,所以我将链接到它 所以我确信它在当时起了作用,但时间变了:) 作为Haskell的新手,迈出一小步,这会让我更进一步。 我尝试了各种解决方案,解决了各种问题 建议的解决方案Haskell 为国家实施演出,haskell,functional-programming,Haskell,Functional Programming,这个话题之前已经讨论过了,所以我将链接到它 所以我确信它在当时起了作用,但时间变了:) 作为Haskell的新手,迈出一小步,这会让我更进一步。 我尝试了各种解决方案,解决了各种问题 建议的解决方案 instance Show a => Show (State a) where show (State f) = show [show i ++ " => " ++ show (f i) | i <- [0..3]] 同样的问题也适用于信息:状态 class Monad m
instance Show a => Show (State a) where
show (State f) = show [show i ++ " => " ++ show (f i) | i <- [0..3]]
同样的问题也适用于信息:状态
class Monad m => MonadState s (m :: * -> *) | m -> s where
...
state :: (s -> (a, s)) -> m a
-- Defined in ‘Control.Monad.State.Class’
我不确定我是否能理解答案,但是非常感谢您的帮助。我构建这个包的目的是显示小型域上的功能(以及其他功能)。您可以使用它为状态
创建显示
实例,方法如下:
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE UndecidableInstances #-}
import Control.Monad.State
import Data.Universe
import Data.Universe.Instances.Reverse
deriving instance (Finite s, Show s, Show (m (a,s))) => Show (StateT s m a)
试一试:
> modify not :: State Bool ()
StateT {runStateT = [(False,Identity ((),True)),(True,Identity ((),False))]}
在universe reverse instances
包中包含这样的内容(以及类似的ReaderT
等)可能会很有趣。我得想一个明智的办法
从头开始解释
State
和StateT
的任务可能比SO的答案稍微大一点,但是网络上有很多关于这种类型的教程。你可能也喜欢。这个问题中的State
不是标准库中的类型,这是问题中定义的自定义类型。特别是,它被限制为类型为Int
的状态值,这就是为什么您可以通过采样一组数字为它编写Show
实例的原因。这不适用于实状态
类型。也就是说,您可以使用辅助的类SampleDomain a::SampleDomain::[a]
对实状态类型执行类似的操作;然后实例(样本域s,Show s,Show a)=>Show(状态sa)
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE UndecidableInstances #-}
import Control.Monad.State
import Data.Universe
import Data.Universe.Instances.Reverse
deriving instance (Finite s, Show s, Show (m (a,s))) => Show (StateT s m a)
> modify not :: State Bool ()
StateT {runStateT = [(False,Identity ((),True)),(True,Identity ((),False))]}