比较类型 Haskell
Comparing on Type Haskell
我想通过比较类型对列表进行排序
type Dakar = [Piloto]
data Piloto = Carro Numero Nome Categoria
| Mota Numero Nome Categoria
| Camiao Numero Nome
type Numero = Int
type Nome = String
data Categoria = Competicao | Maratona
inserePil :: Piloto -> Dakar -> Dakar
inserePil p (h:t) = sortBy (compare `on` Nome) (h:p:t)
但它给了我错误。正确的做法是什么?
Nome
不是谓词,它是类型的名称。你可以做
nome :: Piloto -> Nome
nome (Carro _ n _) = n
nome (Mota _ n _) = n
nome (Camiao _ n) = n
那你就可以使用sortBy (compare `on` nome)
了。但是,on compare
已经有一个函数,它是 Data.Ord.comparing
,因此您可以改写
inserePil p ds = sortBy (comparing nome) (p:ds)
我想通过比较类型对列表进行排序
type Dakar = [Piloto]
data Piloto = Carro Numero Nome Categoria
| Mota Numero Nome Categoria
| Camiao Numero Nome
type Numero = Int
type Nome = String
data Categoria = Competicao | Maratona
inserePil :: Piloto -> Dakar -> Dakar
inserePil p (h:t) = sortBy (compare `on` Nome) (h:p:t)
但它给了我错误。正确的做法是什么?
Nome
不是谓词,它是类型的名称。你可以做
nome :: Piloto -> Nome
nome (Carro _ n _) = n
nome (Mota _ n _) = n
nome (Camiao _ n) = n
那你就可以使用sortBy (compare `on` nome)
了。但是,on compare
已经有一个函数,它是 Data.Ord.comparing
,因此您可以改写
inserePil p ds = sortBy (comparing nome) (p:ds)