newtype

    6热度

    1回答

    我发现我可以做到这一点1 :: Product Int并得到Product {getProduct = 1}作为结果。 Product是在Data.Monoid中定义的newtype。比我试图定义我自己newtype像这样: newtype Stuff a = Stuff {getStuff :: a} deriving (Show) 但是,如果我尝试做1 :: Stuff Int我得到一个错

    1热度

    1回答

    我是Haskell和FP的新手,正在通过LYAH和其他来源工作,但是“通过干涉学习”我试图编写一个小程序JSON解析。然而,我已经把自己编码到了一个角落,并且不能离开。我的代码是从各种教程中拼凑出来的,我可以感觉到我仍然“在程序上思考”如何很好地将它组合在一起,但是我没有得到必要的突破来使它工作。 首先,这里是一个多级JSON文件的简化版,它是Weather Underground API的天气预

    1热度

    1回答

    我使用NEWTYPE作为记录的字段,和模式匹配的“父”类型来提取嵌套值是麻烦: newtype CityName = CityName String newtype City = City { name :: CityName } instance showCity :: Show City where show (City { name }) = case name o

    0热度

    2回答

    我有一个Pair newtype,它只是一个元组Double s,我希望能够使用这种类型的算术运算符。这里是我的代码,这并不编译: module Test where newtype Pair = Pair (Double, Double) instance Num Pair where Pair (x1, y1) + Pair (x2, y

    8热度

    1回答

    我试图采用ExceptT a (StateT A M),对于某些具体类型A和monad M,并将它们包裹到我的新自定义monads中。 首先我确定了StateT A M在其他环境中经常出现,因此我决定这将是最好的单独包装在一个单子M1,然后包装成ExceptT a M1M2。 期望的特性是使MonadStateM1和M2实例和类M(让我们假设它被称为MyMonadClass)。 M2也应该是Mon

    0热度

    1回答

    我有一个类型类: class Wrapper w where open :: w -> Map String Int close :: Map String Int -> w 它看起来并不非常有用,我却用它强烈(不只是一个type代名词)的Map String Int S语义不同品种区别: newtype FlapMap = Flap (Map String Int) n

    3热度

    2回答

    newtype MyNewtype1 f v = MyNewtype1 { getVal1 :: f v } deriving Eq -- OK newtype MyNewtype2 f maybe v = MyNewtype2 { getVal2 :: f (maybe v) } deriving Eq --OK newtype MyNewtype3 f v = MyNewtype3 { g

    3热度

    1回答

    创建类似数字的自定义类型的最简单方法是什么?我想要在我的程序中防止混合不同单元的类型检查,但我仍然希望能够轻松地对类型执行计算而不需要来回转换(类似于自定义Centimeters和Inches类型的情况)。 如果我创建: struct Centimeters(f64); 然后我必须手动执行Add,Mul,Ord和许多其他的特征。这是很多的样板,并复制&粘贴此代码会产生破坏程序中基本算术的风险:

    7热度

    4回答

    更多的往往不是我写的剥离一种新型的唯一的构造函数,如下面的函数返回不是Nothing第一个参数: process (Pick xs) = (\(First x) -> x) . mconcat . map (First . process) $ xs 我认为lambda是不必要的冗长。我想写这样的事情: process (Pick xs) = -First . mconcat . map (F

    3热度

    3回答

    创建奥德情况下,给定的数据类型,如 data Foo = Bar | Baz | Qux ,我希望有多个不同的排序为这种类型,是下列最常见/标准来实现这种方式? newtype FooPriorityA = FooPriorityA { unFooPriorityA :: Foo } instance Ord FooPriorityA where compare (FooPrio