I think it depends mainly on your use case.
Although I would never use data Point = Point (a, a)because it introduces one layer of indirection that inflates the data structure - with two machine words - one for Pointand one for a pointer pointing to a tuple inside it.
type Point a = (a,a), newtype Point a = Point (a,a), , .
( ) , pr1 pr2 " / ". .
@nikitavolkov - , ,
{-
{-
{-
{-
{-
import Control.Lens
data Point a = Point { _pr1 :: !a
, _pr2 :: !a
} deriving (..)
$(makeLenses ''Point)
norm Point{..} = sqrt (_pr1^2 + _pr2^2) RecordWildCards .
(2017-09-03):
, , -. , , : Data.Strict.Maybe
, Maybe return ⊥ >>= f = ⊥, f ⊥.
, , / .