【问题标题】:purescript data as array of all possible data inhabitants纯脚本数据作为所有可能数据居民的数组
【发布时间】:2022-11-16 23:31:58
【问题描述】:

我得到以下数据类型:

data Icon = IconCircle | IconSquare | IconStar

我需要一组所有可能的Icons?:

allPossible :: Array Icon
allPossible = [IconCircle, IconSquare, IconStar]

是否有创建此数组的快捷方式?例如,当有 20 个(或更多)可能的图标时?

什么时候不:

是否可以为 allPossible 创建一个强制包含所有可能图标的类型?

我的目标是强制这个数组永远不会不完整。

【问题讨论】:

    标签: types purescript


    【解决方案1】:

    就在这里!

    您可以派生 Generic,然后结合使用 GenericEnumGenericBottom 来枚举所有构造函数:

    data Icon = IconCircle | IconSquare | IconStar
    derive instance Generic Icon _
    
    allPossible :: Array Icon
    allPossible = unfoldr ( -> Tuple a <$> genericSucc a) genericBottom
    

    你甚至可以让它完全通用,所以它适用于任何类型,而不仅仅是 Icon

    allPossible :: forall a rep. 
      Generic a rep =>
      GenericEnum rep => 
      GenericBottom rep => 
      Array a
    allPossible = unfoldr ( -> Tuple a <$> genericSucc a) genericBottom
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多