首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏函数式编程语言及工具

    Scalaz(5)- typeclass:my typeclass scalaz style-demo

      我们在上一篇讨论中介绍了一些基本的由scalaz提供的typeclass。这些基本typeclass主要的作用是通过操作符来保证类型安全,也就是在前期编译时就由compiler来发现错误。 在这篇讨论中我希望能按照scalaz的格式设计自己的typeclass并能使之融入scalaz库结构里去。   我们来设计一个NoneZero typeclass。 这个NoneZero typeclass能确定目标类型值是否为空,如: 0.nonZero = false 3.nonZero = true "".nonZero = false "value".nonZero = true List().nonZero = false List(1,2,3).nonZero = true 首先是trait: (定义typeclass行为) 1 trait NonZero[A ] { 2 def nonZero(a: A): Boolean 3 } 现在NonZero typeclass只有一项功能或行为,就是这个抽象函数NonZero:对任何类型A值a,返回Boolean

    64690发布于 2018-01-05
  • 来自专栏Ldpe2G的个人博客

    Scala typeclass 设计模式

    本文的主要内容 是根据参考资料对typeclass的解释再加上自己的一点点理解,代码会借(cao)鉴(xi)资料 中的例子(不过代码会稍作修改)。 正文 typeclass定义 首先简单看看维基上对于typeclass的定义:"In computer science, a type class is a type system construct 在scala中采用typeclass模式有什么有优点呢?总的来说就是:代码易扩展;代码写得好看。 在例子中理解 typeclass 以下用到的代码均借鉴自[2] 。

    59060发布于 2018-06-24
  • 来自专栏我的独立博客

    Haskell Type与Typeclass

    Typeclass 如果一个类型属于某个typeclass,那它必定实现了Typeclass所描述的行为。 tip: 跟OOP中的接口很像 以==函数的类型声明为例: Prelude> :t (==) (==) :: Eq a => a -> a -> Bool 这里的Eq就是typeclass, 这里意思是说 a这个type必须是Eq的一个实现(相当于OOP中的a implement Eq) =>符号左边的部分叫做类型约束 Eq这个Typeclass提供了判断相等性的接口,凡是可比较相等性的类型必定属于Eq Show的成员为可用字符串表示的类型,操作Show Typeclass最常用的函数表示show。 这是因为haskell无法推导出我们想要的是一个什么类型的值,read函数的类型声明: Prelude> :t read read :: Read a => String -> a 它的回传值属于Read Typeclass

    71510编辑于 2024-09-02
  • 来自专栏Ldpe2G的个人博客

    Scala typeclass 设计模式

    本文的主要内容是根据参考资料 对typeclass的解释再加上自己的一点点理解,代码会借(cao)鉴(xi)资料中的例子(不过代码会稍作修改)。 正文 typeclass定义   首先简单看看维基上对于typeclass的定义:"In computer science, a type class is a type system  construct 在scala中采用typeclass模式有什么有优点呢?总的来说就是:代码易扩展;代码写得好看。 在例子中理解 typeclass   以下用到的代码均借鉴自[2] 。

    52860发布于 2018-07-09
  • 来自专栏函数式编程语言及工具

    Scalaz(8)- typeclass:Monoid and Foldable

      Monoid是种最简单的typeclass类型。 我们先看看scalaz的Monoid typeclass定义:scalaz/Monoid.scala 1 trait Monoid[F] extends Semigroup[F] { self => 2 实际上Monoid typeclass也就是支持了append(|+|)这么一个简单的操作。 Foldable typeclass提供了许多注入方法支持折叠操作: scalaz/syntax/FoldableSyntax.scala 1 final class FoldableOps[F[_] 我还看不到任何需要去自定义集合类型,标准库的集合类型加上Foldable typeclass应该足够用了。

    1.4K90发布于 2018-01-05
  • 来自专栏黯羽轻扬

    深入typeclass_Haskell笔记4

    零.Typeclass与Class Typeclass就是Haskell中的接口定义,用来声明一组行为 OOP中的Class是对象模板,用来描述现实事物,并封装其内部状态。 派生自某类(deriving (SomeTypeclass))是说具有某类定义的行为,相当于OOP中的实现了某个接口,所以具有接口定义的行为 一.声明 class关键字用来定义新的typeclass: 通过间接递归定义来描述这两个函数的关系,这样只需要提供一个函数的实现就够了(这种方式称为minimal complete definition,最小完整定义) P.S.GHCi环境下,可以通过:info <typeclass >命令查看该类定义了哪些函数,以及哪些类型属于该类 二.实现 instance关键字用来定义某个typeclass的instance: instance Eq TrafficLight where Red P.S.GHCi环境下,可以通过:info <type>命令查看该类型属于哪些typeclass 子类 同样,也有子类的概念,是指要想成为B类成员,必须先成为A类成员的约束: class (Eq a)

    81510发布于 2019-06-12
  • 来自专栏我的独立博客

    Haskell 自定义type与typeclass

    成为另一个typeclass的subclass。 如果想看一个 typeclass 有定义哪些 instance。可以在 ghci 中输入 :info YourTypeClass。 所以输入 :info Num 会告诉你这个 typeclass 定义了哪些函数,还有哪些类型属于这个 typeclass。:info 也可以查找类型跟类型构造器的信息。 他会显示 Maybe 所属的所有 typeclass。:info 也能告诉函数的型别宣告。 Functor typeclass 首先看下Functor这个typeclass class Functor f where fmap :: (a -> b) -> f a -> f b tip

    61910编辑于 2024-09-02
  • 来自专栏函数式编程语言及工具

    Scalaz(6)- typeclass:Functor-just map

    在scalaz里,Functor就是一个普通的typeclass,具备map over特性。我的理解中,Functor的主要用途是在FP过程中更新包嵌在容器(高阶类)F[T]中元素T值。 scalaz提供了Functor typeclass不但使用户能map over自定义的高阶类型F[T],并且用户通过提供自定义类型的Functor实例就可以免费使用scalaz Functor typeclass 任何类型的实例只需要实现这个抽象函数map就可以使用scalaz Functor typeclass的这些注入方法了:scalaz/syntax/FunctorSyntax.scala 1 final

    1K50发布于 2018-01-05
  • 来自专栏函数式编程语言及工具

    Scalaz(7)- typeclass:Applicative-idomatic function application

    Scalaz的Applicative typeclass提供了各种类型的函数施用(function application)和升格(lifting)方法。 与其它scalaz typeclass使用方式一样,我们只需要实现了针对自定义类型的Applicative实例就可以使用这些方法了。 现在我们可以针对Configure类型使用Applicative typeclass的功能函数了。 总结来说:Applicative typeclass提供了一套函数施用方式。它是通过一个包嵌在容器结构的高阶函数实现管道内的施用。 Applicative typeclass还提供了方法将普通函数升格到高阶函数使FP和OOP混合模式的函数施用更安全方便。

    1.1K90发布于 2018-01-05
  • 来自专栏函数式编程语言及工具

    Scalaz(9)- typeclass:checking instance abiding the laws

      在前几篇关于Functor和Applilcative typeclass的讨论中我们自定义了一个类型Configure,Configure类型的定义是这样的: 1 case class Configure 我们只要证明Configure类型的实例能遵循它所代表的typeclass操作定律就行了。Scalaz为大部分typeclass提供了测试程序(scalacheck properties)。

    63660发布于 2018-01-05
  • 来自专栏函数式编程语言及工具

    Scalaz(4)- typeclass:标准类型-Equal,Order,Show,Enum

      Scalaz是由一堆的typeclass组成。每一个typeclass具备自己特殊的功能。用户可以通过随意多态(ad-hoc polymorphism)把这些功能施用在自己定义的类型上。 在这篇讨论里我们可以通过介绍scalaz的一些比较简单的typeclass来了解scalaz typeclass的实现、应用方法以及scalaz函数库的内部结构。   我们首先看看Equal:这是个比较典型的typeclass,适合用来介绍scalaz typeclass的一些实现方式、应用模式以及函数库结构。 介绍了Equal typeclass的实现和应用原理后,解释其它的typeclass就简单许多了。 Show 是一个简单的typeclass

    1.7K50发布于 2018-01-05
  • 来自专栏函数式编程语言及工具

    Scalaz(2)- 基础篇:随意多态-typeclass, ad-hoc polymorphism

    功能基本上由以下三部分组成: 1、新的数据类型,如:Validation, NonEmptyList ... 2、标准scala类型的延伸类型,如:OptionOps, ListOps ... 3、通过typeclass Inheritance 3、模式匹配 Pattern-matching 4、特性 Traits/interfaces 5、类型参数 Type parameters 作为一种通用的组件库,scalaz是通过任意多态typeclass 现在再尝试用typeclass模式:typeclass模式是由trait加implicit组成。

    98070发布于 2018-01-05
  • 来自专栏全栈程序员必看

    Protostuff序列化分析

    . */ public static <T> Schema<T> getSchema(Class<T> typeClass) { return getSchema (typeClass, ID_STRATEGY); } /** * Gets the schema that was either registered or lazily IdStrategy strategy) { return strategy.getSchemaWrapper(typeClass, true).getSchema(); , boolean create) { HasSchema<T> hs = (HasSchema<T>) pojoMapping.get(typeClass.getName()) , fields, RuntimeEnv.newInstantiator(typeClass)); } 主要就是对typeClass进行反射,然后进行封装;将字段类型封装成了RuntimeFieldFactory

    75920编辑于 2022-08-23
  • 来自专栏函数式编程语言及工具

    Scalaz(11)- Monad:你存在的意义

    我们知道:对于任何类型,我们只需要实现这个类型的typeclass实例就可以在对这个类型施用所对应typeclass提供的所有组件函数了(combinator)。 突然之间我们的焦点好像都放在了如何获取typeclass实例上了,从而忽略了考虑为什么要使用这些typeclass及使用什么样的typeclass这些问题了。 有所区分,我们就暂时把它们统称为Monadic typeclass吧。 从另一个角度解释:scalaz typeclass 代表着抽象编程概念。typeclass是通过即兴多态来实现针对各种类型值的FP式计算的。 现在我们可以分析一下应该使用什么typeclass了。总体来说,我的理解是可以把scalaz typeclass分成种类和特质: 种类定义了FP编程的各种模式。

    1.3K80发布于 2018-01-05
  • 来自专栏全栈程序员必看

    004-protostuff踩坑-java bean新增字段反序列化失败问题

    说明 protostuff 只序列话字段值,不序列化 key(map可能除外) 顺序默认按照 typeClass.getDeclaredFields() (但是 jdk的这个方法 返回顺序,不是按照源码 不能依赖于 typeClass.getDeclaredFields(), 强制要求 按照 @Tag 添加指定字段顺序。 > typeClass) { if (Object.class ! = typeClass.getSuperclass()) fill(fieldMap, typeClass.getSuperclass()); for (java.lang.reflect.Field f : typeClass.getDeclaredFields()) { int mod = f.getModifiers(); if (!

    3.1K11编辑于 2022-08-24
  • 来自专栏IT云清

    Java---通过属性名反射获取get和set方法

    set方法,并把值set到对象中 * @param obj 对象 * @param clazz 对象的class * @param fileName 需要设置值得属性 * @param typeClass +filedName.substring(1); try{ Method method = clazz.getDeclaredMethod(methodName, new Class[]{typeClass }); method.invoke(obj, new Object[]{getClassTypeValue(typeClass, value)}); }catch(Exception ex){ ex.printStackTrace(); } } /** * 通过class类型获取获取对应类型的值 * @param typeClass class类型 > typeClass, Object value){ if(typeClass == int.class || value instanceof Integer){

    7.2K30发布于 2019-01-22
  • 来自专栏方球

    vue 实现一个简单的栅格组件

    ; // 切分接口类型 let sizeType:string[] = ['xs', 'sm', 'md', 'span'] let typeClass type}-${size}`]: true } } // 合并类名 typeClass = Object.assign(typeClass, temp) }) return typeClass } { span, xs, sm, md } = this; let sizeType:string[] = ['xs', 'sm', 'md', 'span'] let typeClass = Object.assign(typeClass, temp) }) return typeClass

    2.5K20发布于 2019-08-30
  • 来自专栏Scott_Mr 个人专栏

    利用Runtime实现简单的字典转模型

    = NSClassFromString(code); _numberType = (_typeClass == [NSNumber class] || [_typeClass = type.typeClass; if (type.isBoolType) { NSLog(@"Bool"); }else = NSClassFromString(code); _numberType = (_typeClass == [NSNumber class] || [_typeClass isSubclassOfClass type.isFromFoundation && typeClass) { value = [typeClass objectWithKeyValues:value]; } 到这里 type.isFromFoundation && typeClass) { value = [typeClass objectWithKeyValues:value];

    1.6K30发布于 2018-07-05
  • 来自专栏Scott_Mr 个人专栏

    利用Runtime实现简单的字典转模型

    = NSClassFromString(code); _numberType = (_typeClass == [NSNumber class] || [_typeClass = type.typeClass; if (type.isBoolType) { NSLog(@"Bool"); }else = NSClassFromString(code); _numberType = (_typeClass == [NSNumber class] || [_typeClass isSubclassOfClass type.isFromFoundation && typeClass) { value = [typeClass objectWithKeyValues:value]; } 到这里 type.isFromFoundation && typeClass) { value = [typeClass objectWithKeyValues:value];

    2.3K60发布于 2018-05-16
  • 来自专栏全栈程序员必看

    protostuff 工具类「建议收藏」

    ; } } } /** * 将byte数组反序列化为指定对象 * @param source * @param typeClass * @param <T> * @return */ public static <T> T deserialize(byte[] source, Class<T> typeClass ) { try { RuntimeSchema<T> schema = RuntimeSchema.createFrom(typeClass); T newInstance = typeClass.newInstance(); ProtostuffIOUtil.mergeFrom(source, newInstance,

    66020编辑于 2022-08-15
领券