newtype

    3热度

    1回答

    我很感兴趣,让我的单子转换堆栈缩放功能,其定义方式如下: newtype Awesome a = Awesome (StateT AwesomeState (ExceptT B.ByteString IO) a) deriving (Functor, Applicative, Monad , MonadIO, MonadError B.ByteString ,

    4热度

    2回答

    假设我有这样的NEWTYPE: newtype SomeType a = SomeType { foo :: OtherType a } 我想确保a是showable(属于类型类Show x)。 我该如何确保? (它甚至可能吗?) 加分:我正确使用术语?

    2热度

    2回答

    假设有一个类型A,它是类C的实例。 如果我理解正确,为了覆盖实例实现,通常会引入一个包装newtype A' = A' A,然后将所有发生的A包装在A'中。 但是,如何确保您不会意外忘记包装某些A s,并且所有A都使用新的实施? 我们可以做点什么吗?

    8热度

    2回答

    请帮助我理解了如下定义: newtype Writer w a = Writer { runWriter :: (a,w) } instance (Monoid w) => Monad (Writer w) where return a = Writer (a,mempty) (Writer (a,w)) >>= f = let (a',w') = runWriter

    7热度

    4回答

    比方说,我有以下newtype: newtype Foo = Foo Integer deriving (Eq, Show) 是否有添加两个Foo的一个简洁的方式: (Foo 10) + (Foo 5) == Foo 15 或获取最大值: max (Foo 10) (Foo 5) == Foo 5? 我很好奇,如果有可能很容易地使用a功能为newtype a,而不是做: addFoo :: Foo

    4热度

    1回答

    我已经定义了一种叫做Poly的新类型。 Poly是一个多项式的列表表达式(Num的列表),我试图定义一个函数“chop”,它从Poly的末尾取出多余的0。 Chop将一个Poly作为参数,然后返回一个Poly。出于某种原因,我得到了以下错误消息: 预计的约束,但“保利”具有一种“*” 在类型签名“斩”:斩::聚A =>一 - >一个 newtype Poly a = P [a] chop ::

    8热度

    1回答

    在Haskell中,有两种为类型提供别名的方法:type和newtype。 type提供类型同义词,这意味着同义词由类型检查器视为完全相同的原始类型: type UserId = Int hasAccess :: UserId -> Bool hasAccess id = {-- stuff --} -- Elsewhere in the program login :: Int ->

    15热度

    2回答

    我想了解Monads made difficult的交代,我有一个很难搞清楚以下NEWTYPE定义: newtype (FComp g f) x = FComp { unCompose :: g (f x) } instance (Functor b c f, Functor a b g) => Functor a c (FComp g f) where fmap f (FComp

    13热度

    1回答

    的派生实例,我使用ghci,该代码段 newtype Gold = Gold Int deriving (Eq, Ord, Show, Num) 显示错误的 Can't make a derived instance of 'Num Gold': 'Num' is not a derivable class Try GeneralizedNewTypeDerivi

    6热度

    1回答

    Haskell中可以推导出实例MonadState s以下但不T1在T2然而,这是一个非常相似的类型。在哪种方式下,我应该修改T2的代码,以便MonadState s的实例可以自动派生? {-# LANGUAGE GeneralizedNewtypeDeriving #-} import Control.Monad.Reader import Control.Monad.State ne