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

这个话题之前已经讨论过了,所以我将链接到它

所以我确信它在当时起了作用,但时间变了:)

作为Haskell的新手,迈出一小步,这会让我更进一步。 我尝试了各种解决方案,解决了各种问题

建议的解决方案

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))]}